模拟大数运算
发布时间:2021-03-05 19:45:13 所属栏目:大数据 来源:网络整理
导读:1.大数乘法 void multify(const char* a,const char* b){ assert(a != NULLb != NULL); int lena = strlen(a); int lenb = strlen(b); vectorint sum(lena + lenb,0); for (int i = 0; i lena; i++){ for (int j = 0; j lenb; j++){ sum[i + j + 1] += (a[
1.大数乘法void multify(const char* a,const char* b){ assert(a != NULL&&b != NULL); int lena = strlen(a); int lenb = strlen(b); vector<int> sum(lena + lenb,0); for (int i = 0; i < lena; i++){ for (int j = 0; j < lenb; j++){ sum[i + j + 1] += (a[i] - '0') * (b[j] - '0'); } } for (int i = lena + lenb - 1; i >= 0; i--){ if (sum[i] >= 10){ sum[i - 1] += sum[i] / 10; sum[i] %= 10; } } int i = 0; while (sum[i] == 0) i++; for (; i < lena + lenb; i++){ cout << sum[i]; } cout << endl; } 2.大数加法void add(const char* a,const char* b){ assert(a != NULL&&b != NULL); int lena = strlen(a); int lenb = strlen(b); vector<int> sum(max(lena,lenb)+1,0); int i = lena-1,j = lenb-1; int k = 0; for (; i >=0 && j >=0; i--,j--){ sum[k]=(a[i] - '0') + (b[j] - '0'); k++; } while (i >=0){ sum[k]=a[i] - '0'; i--; k++; } while (j >=0){ sum[k]= b[j] - '0'; j--; k++; } int len = sum.size()-1; if (sum[len] == 0) len--; for (i = 0; i <= len; i++){ if (sum[i]>=10){ sum[i + 1] += sum[i] / 10; sum[i] %= 10; } } if (sum[len+1] > 0) len++; for (i = len; i >= 0; i--) cout << sum[i]; cout << endl; } 比如杭电 1002 A + B Problem II #include<iostream> #include<cstdio> #include<vector> #include<algorithm> using namespace std; char a[1002]; char b[1002]; int main(){ int T; //freopen("test.txt","r",stdin); scanf("%d",&T); for (int t = 1; t <= T;t++){ scanf("%s %s",&a,&b); int lena = strlen(a); int lenb = strlen(b); vector<int> sum(max(lena,lenb) + 1,0); int i = lena - 1,j = lenb - 1; int k = 0; for (; i >= 0 && j >= 0; i--,j--){ sum[k] = (a[i] - '0') + (b[j] - '0'); k++; } while (i >= 0){ sum[k] = a[i] - '0'; i--; k++; } while (j >= 0){ sum[k] = b[j] - '0'; j--; k++; } int len = sum.size() - 1; if (sum[len] == 0) len--; for (i = 0; i <= len; i++){ if (sum[i] >= 10){ sum[i + 1] += sum[i] / 10; sum[i] %= 10; } } if (sum[len + 1] > 0) len++; cout << "Case " << t << ":" << endl; printf("%s + %s = ",a,b); for (i = len; i >= 0; i--) cout << sum[i]; cout << endl; if (t != T) cout << endl; } return 0; } (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |