做高精度的题时,一定要注意一些细节额
心态超容易蹦的。
这里有一道加法的高精度。
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
bool carryBit (char a,char b,char c){
if (a+b+c>153)return true;
return false;
}
int main()
{
int t;
int count = 1;
scanf("%d",&t);
while (t--){
char a[1002],b[1002],c[1002],d[1002],e[1002];
int i,j,k;
scanf("%s",&a);//cong a[0]kaishi dao a[strlen-1];
scanf("%s",&b);
strcpy(c,a);
strcpy(d,b);
printf("Case %d:\n",count);
printf("%s + %s = ",c,d);
if (strlen(a)<strlen(b)){
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
}
// 现在保证了a的长度一定大于b
for (i = 0;i < 1002;i ++)c[i] = '0';
for (i = strlen(a)-1,j = strlen(b)-1,k = 0;i >= 0;i --,j --,k ++){
// 现在还需要一个值来使c赋值;
if (j == -1)
{for (j = 0;j < 1002;j ++)
b[j] = '0';
j --;
}
// 防止b的位数不够
if (carryBit(a[i],b[j],c[k])){
c[k+1] = '1';
c[k] = c[k] + a[i] + b[j] - 106;
if (0 == i)k ++;
}else {c[k] = c[k] + a[i] + b[j] -96;}
// 进位完毕
}
int counter = 0;
count ++;
for (i = k-1;i >= 0;i --){
if (1 == k)printf("%c",c[i]);
else {
if ('0' == c[i]&&0 == counter)continue;
printf("%c",c[i]);
counter = 1;
}
}printf("\n\n");
}
return 0;
}