hdu1002 大数运算

题目要求:
简而言之就是输入任意两数进行求和,因为数字很大,所以直接求和显然不行,所以想到了用字符串来做(模拟加法运算)(也可以用数组做)
//格式就不细说了
#include 
#include 
int change(char a[1010],char b[1010])
{
    char c[1010];
    
    int i,j;
    int max=(strlen(a)>=strlen(b))?strlen(a):strlen(b);
    if(strlen(a)>=strlen(b))
    {
        for(i=strlen(a)-1,j=strlen(b)-1;i>=0;i--,j--)
        {
            if(j>=0)
            c[i]=b[j];
            else
            c[i]='0';// 这一步很关键,将长度较小的字符串赋值给另一个字符串,较短的字符串空位置放字符'0'这样就能使两个相加的字符串对齐了;
        }
     
        for(i=max-1;i>=0;i--)
        {
            if((a[i]+c[i]-48)<='9')
            {
            a[i]=a[i]+c[i]-48; //  -48 相当于 -'0' 因为字符0的asc码值为48;
            
            }
            else
            {
            	a[i]=a[i]+c[i]-48-10; 如果a[i]+c[i]-48的值大于'9'那么再减掉10 就相当于进位后该位的值;
           	 if(i-1>=0)
            	a[i-1]+=1;
           	 if(i-1==-1)
          	  printf("1");//当字符串运算到第一位是也就是a[0]+c[0]可能会出现进位,但字符串已经没有空位置,考虑到两个数加法最多进1,所			//这种情况就先输出'1';
            }
        }
        printf("%s\n",a);
    }
    if(strlen(b)>strlen(a))
    {
        for(i=strlen(b)-1,j=strlen(a)-1;i>=0;i--,j--)//同上
        {
            if(j>=0)
            c[i]=a[j];
            else
            c[i]='0';
        }
        for(i=max-1;i>=0;i--)
        {
            if(b[i]+c[i]-48<='9')
            b[i]=b[i]+c[i]-48;
            
            else
            {
            b[i]=b[i]+c[i]-48-10;
            if(i-1>=0)
            b[i-1]+=1;
            if(i-1==-1)
            printf("1");
            }
        }
        printf("%s\n",b);
    }
    
    
}
int main()
{
    
    int i=0,n;
    scanf("%d",&n);
    while(n--)
    {
        char a[1010];
        char b[1010];
        if(i>=1)
        printf("\n");//控制格式, 每两个Case之间有空行,最后一行没有
        scanf("%s",a);
        scanf("%s",b);
        printf("Case %d:\n",++i);
        printf("%s + %s = ",a,b);
        
        change(a,b);
        
    }
    
    
    return 0;
}
测试数据 
99900 00999
00999 99900
000 0000
0 0
1000 0001
9999 1
1 9999
这几个数据和样例都过了,应该可以AC了
 以上测试数据由
ultimater的博客提供,下面是他的博客hdu1002博客链接
http://blog.csdn.net/ultimater/article/details/7884836
 
   

转载于:https://www.cnblogs.com/chaiwenjun000/p/5321074.html

你可能感兴趣的:(hdu1002 大数运算)