HDU 1002 A + B Problem II (高精度加法)

    xiaoxiao2023-03-24  3

    思路:

    改良了之前自己写的一个高精度的模板。。。也不能说是改良吧,应该是改错。。。 这题不会出现 000 + 000000 = 0 这种情况。 然后就是恶心的格式。。。pe了好久。。。

    AC代码:

    #include <iostream> #include <cstdio> #include <ctime> #include <cstdlib> #include <string.h> #define N 10000 using namespace std; // 大数a,b相加 ,结果放在c上 void BigSum(char* a,char *b,char *c){ char s[N]; int i = strlen(a); int j = strlen(b); if(i<j){ int temp = i; i = j; j = temp; char * tt = a; a = b; b = tt; } int jinwei = 0; int k; for(k = 1;k <= i+1;k++){ int m; if(j >= k) m = a[i-k] + b[j-k] - 48 * 2 + jinwei; else if( i >= k) m = a[i-k] - 48 + jinwei; else{ m = jinwei; if(m == 0)break; } if(m >= 10){ jinwei = 1; m-=10; } else{ jinwei = 0; } char c = m + 48; s[k-1] = c; } k--; k--; for(int l = 0;l <= k;l++){ c[l] = s[k-l]; } c[k+1] = '\0'; } char mm[5000]; char n1[5000]; char n2[5000]; int main() { int cas = 0; int t; cin>>t; while(t--){ cas++; scanf("%s%s",n1,n2); BigSum(n1,n2,mm); printf("Case %d:\n",cas); printf("%s + %s = ",n1,n2); for(int i = 0;mm[i];i++){ printf("%c",mm[i]); } if(t != 0) printf("\n\n"); else printf("\n"); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1201295.html
    最新回复(0)