注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ACM 1002:A + B Problem II C语言代码

OC/C/C++ 水墨上仙 2335次浏览 已收录 手机上查看

Problem Description

I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.

Input

The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
Output

For each test case, you should output two lines. The first line is “Case #:”, # means the number of the test case. The second line is the an equation “A + B = Sum”, Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.

Sample Input

2

1 2

112233445566778899 998877665544332211

Sample Output

Case 1:

1 + 2 = 3

Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110

问题描述:

一个很简单的问题,给你两个整数A和B,你的工作就是计算出A+B

输入:

第一行输入一个范围在1~20的整数T,代表测试的组数。然后再输入T行,每行两个整数A和B。注意:整数非常大,你不能用int型的变量来表示,你可以假设每个数的位数不超过1000位

输出:每组测试都需要输出两行,第一行是Case:#,#代表测试的组号,第二行输出一个等式A + B = SUM,SUM是A+B的结果,注意:在这个等式中有一些空格。在每两组测试之间输出一行空行

C语言代码1


#include <stdio.h>
void main() 
{
    int T=0,m=1; //m为当前测试的组号
    scanf("%d",&T);//T为待测试的组数
    while(T--)
    {
      char c[1000],a[1000],b[1000];
      int x=0,y=0,t=0,v=0,j,k,z=0;
      scanf("%d%d",&a,&b);//输入A和B
      while(a[x])x++;//计算a的位数
      while(b[y])y++; //计算b的位数
      j=x<y?x:y;//j取A、B两数中较小的数的位数
      for(k=0;k<j;k++,z++,x--,y--) 
     {
          t=a[x-1]-48+b[y-1]-48+v; //从两数的末位开始相加
          c[z]=48+t%10;//将两数的对应位数相加后的数字赋给数组c
          v=t/10; //用来检测是否需要进位
     }
     if(x<y){
     j=y-x;//j为A、B两数的位数之差(正数)
     for(k=0;k<j;k++,z++,y--) //将位数较多的数的前几位赋给数组c
     {
       t=b[y-1]-48+v;
       c[z]=48+t%10;
       v=t/10;
      }
     }else{
       j=x-y;
       for(k=0;k<j;k++,z++,x--)
       {
         t=a[x-1]-48+v;
         c[z]=48+t%10;
         v=t/10;
        }
      }
      if(v)//如果结果的最高位数字大于十(即最高位产生进位)
     {
      c[z]=48+v;//将最高位赋给数组c
      z++;
      c[z]=0;//数组以'\0'结束
     }else c[z]=0;//数组以'\0'结束
     char d[1000];
     x=0;
     while(c[x])x++;
     j=x;//将结果的位数赋给j(注意:结果不包括最后的'\0')
     printf("Case %d:\n",m);
     m++;
    for(k=0;k<j;k++,x--)
    {
      d[k]=c[x-1];//将数组c反序输出到数组d中
    }
    d[k]=0;//加入字符串结束符'\0'
    printf("%s + %s = %s\n",a,b,d);
    if(T)printf("\n");
    }
 }

C语言代码2


#include<stdio.h>
#include<string.h>
#define N 1005
void main()
{
  char A[N],B[N],S[N];
 int T;
  int i,j,k,l;
    int flag;
 while(scanf("%d",&T)!=EOF)
 {
 for(i=0;i<T;i++)
 { 
  if(i)
   printf("\n");
  j=0,flag=0;
    scanf("%s%s",&A,&B);
  k=strlen(A)-1;
  l=strlen(B)-1;
  while((k+1)&&(l+1))
  {
   S[j]=(A[k]-'0')+(B[l]-'0')+flag;
   if(S[j]>=10)
   {
    S[j]=S[j]-10;
    flag=1;
   }
   else flag=0;
   k--,l--,j++;
  }
  if(k+1)
           while(k>=0)
     {
      S[j]=(A[k]-'0')+flag;
      if(S[j]>=10)
      {
       S[j]=S[j]-10;
      flag=1;
      }
      else flag=0;
      k--;
      j++;
     }
  else if(l+1)
     while(l>=0)
     {
      S[j]=(B[l]-'0')+flag;
      if(S[j]>=10)
      {
       S[j]=S[j]-10;
      flag=1;
      }
      else flag=0;
      l--;
      j++;
     }
     if(flag)
      S[j]=flag;
     else j--;
     printf("Case %d:\n",i+1);
            printf("%s + %s = ",A,B);
            while(j>-1)
                printf("%d",S[j--]);
            printf("\n");    
 }
 }
}


C语言参考代码3


 // Author: Tanky Woo
// HDOJ 1002
// Accepted 1002 15MS 204K 1354B C++ Tanky Woo
 
#include <iostream>
#include <algorithm>
using namespace std;
int nCases;
int m[1001], n[1001];
char a[1001], b[1001];
// www.wutianqi.com
int main()
{
	//freopen("input.txt", "r", stdin);
	scanf("%d", &nCases);
	for(int i = 1; i <= nCases; ++i)
	{
		memset(m, 0, sizeof(m));
		memset(n, 0, sizeof(n));
		getchar();
		scanf("%s %s", a, b);
		int len1 = strlen(a);
		int len2 = strlen(b);
		if(len1 > len2)   //是m长度大于n
		{
			// 把字符数组a逆序转成int数组m
			int cnt = 0;
			for(int j = len1-1; j >= 0; --j)
				m[cnt++] = a[j] - '0';
			// 把字符数组b逆序转成int数组n
			cnt = 0;
			for(int j = len2-1; j >= 0; --j)
				n[cnt++] = b[j] - '0';
		}
		else
		{
			// 把字符数组a逆序转成int数组n
			int cnt = 0;
			for(int j = len1-1; j >= 0; --j)
				n[cnt++] = a[j] - '0';
			// 把字符数组b逆序转成int数组m
			cnt = 0;
			for(int j = len2-1; j >= 0; --j)
				m[cnt++] = b[j] - '0';
		}
		int len = len1 > len2? len2: len1;
		int k = 0;  //指示最高位
 
		for(int j = 0; j < len; ++j)
		{
			m[j] += n[j];
			if(m[j] >= 10)
				k = j+1;
			m[j+1] += (m[j]/10);
			m[j] %= 10;
		}
		printf("Case %d:\n", i);
		printf("%s + %s = ",a, b);
		len = len1>len2? len1: len2;
		if(k < len-1)
			k = len-1;
		for(int j = k; j >= 0; --j)
			printf("%d", m[j]);
		i == nCases? printf("\n"): printf("\n\n");
	}
	return 0;
}


C++代码1:

作者:洞庭散人

出处:http://phinecos.cnblogs.com/ 


#include <iostream> 
#include <string> 
using namespace std; 

void Add(string a,string b,char sum[],int& count) 
{//大数加法
    int len1 = a.length();//数a的长度
    int len2 = b.length();//数b的长度
    int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始进位为
    count = 0; 
    //从最后一位开始做加法
    while(i>=0&&j>=0) 
    { 
        temp = a[i]-'0'+b[j]-'0'+carryIn;//计算当前位
        sum[count++] = temp%10+'0'; 
        carryIn = temp/10;//计算进位
        --i; 
        --j; 
    } 
    //第一个数还有剩余
    if(i>=0) 
    { 
        //利用进位继续做
        while(i>=0) 
        { 
            temp = a[i]-'0'+carryIn; 
            sum[count++] = temp%10+'0'; 
            carryIn = temp/10; 
            --i; 
        } 
    } 
    //第二个数还有剩余
    if(j>=0) 
    { 
        while(j>=0) 
        { 
            temp = b[j]-'0'+carryIn; 
            sum[count++] = temp%10+'0'; 
            carryIn = temp/10; 
            --j; 
        } 
    } 
    //最高位特殊考虑下
    if(carryIn>0) 
    { 
        sum[count++] = '1'; 
    } 
} 

void reversePrint(char arr[],int len) 
{//逆向输出
    for(int i=len-1;i>=0;--i) 
    {
        cout<<arr[i]; 
    }
    cout<<endl; 
} 

int main() 
{ 
    string a,b; 
    char sum[2000];//和
    memset(sum,'0',2000); 
    int nCount = 0; 
    int caseNum,curCase=0; 
    cin>>caseNum; 
    do 
    { 
        curCase++; 
        cin>>a>>b; 
        Add(a,b,sum,nCount); 
        cout<<"Case "<<curCase<<":"<<endl; 
        cout<<a<<" + "<<b<<" = "; 
        reversePrint(sum,nCount); 
        if(curCase<caseNum) 
        {
            cout<<endl; 
        }
    }while(curCase<caseNum); 
    return 0; 
} 

C++代码2


 // Author: Tanky Woo
// HDOJ 1002
// Accepted 1002 15MS 204K 1354B C++ Tanky Woo
 
#include <iostream>
#include <algorithm>
using namespace std;
int nCases;
int m[1001], n[1001];
char a[1001], b[1001];
// www.wutianqi.com
int main()
{
	//freopen("input.txt", "r", stdin);
	scanf("%d", &nCases);
	for(int i = 1; i <= nCases; ++i)
	{
		memset(m, 0, sizeof(m));
		memset(n, 0, sizeof(n));
		getchar();
		scanf("%s %s", a, b);
		int len1 = strlen(a);
		int len2 = strlen(b);
		if(len1 > len2)   //是m长度大于n
		{
			// 把字符数组a逆序转成int数组m
			int cnt = 0;
			for(int j = len1-1; j >= 0; --j)
				m[cnt++] = a[j] - '0';
			// 把字符数组b逆序转成int数组n
			cnt = 0;
			for(int j = len2-1; j >= 0; --j)
				n[cnt++] = b[j] - '0';
		}
		else
		{
			// 把字符数组a逆序转成int数组n
			int cnt = 0;
			for(int j = len1-1; j >= 0; --j)
				n[cnt++] = a[j] - '0';
			// 把字符数组b逆序转成int数组m
			cnt = 0;
			for(int j = len2-1; j >= 0; --j)
				m[cnt++] = b[j] - '0';
		}
		int len = len1 > len2? len2: len1;
		int k = 0;  //指示最高位
 
		for(int j = 0; j < len; ++j)
		{
			m[j] += n[j];
			if(m[j] >= 10)
				k = j+1;
			m[j+1] += (m[j]/10);
			m[j] %= 10;
		}
		printf("Case %d:\n", i);
		printf("%s + %s = ",a, b);
		len = len1>len2? len1: len2;
		if(k < len-1)
			k = len-1;
		for(int j = k; j >= 0; --j)
			printf("%d", m[j]);
		i == nCases? printf("\n"): printf("\n\n");
	}
	return 0;
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ACM 1002:A + B Problem II C语言代码
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
水墨上仙
……
加载中……