hdu1002 大数运算
发布时间:2020-12-14 02:53:11 所属栏目:大数据 来源:网络整理
导读:题目要求: 简而言之就是输入任意两数进行求和,因为数字很大,所以直接求和显然不行,所以想到了用字符串来做(模拟加法运算)(也可以用数组做) //格式就不细说了 #include stdio.h#include string.h int change ( char a [ 1010 ], char b [ 1010 ]) { c
题目要求:
简而言之就是输入任意两数进行求和,因为数字很大,所以直接求和显然不行,所以想到了用字符串来做(模拟加法运算)(也可以用数组做)
//格式就不细说了
#include <stdio.h> #include <string.h> 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("%sn",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("%sn",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了
以上测试数据由
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |