浏览 2373 次
锁定老帖子 主题:杰哥私房题──大数相除
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-16
问题描述 1000000000000000000000000000000
#include <stdio.h> #include <string.h> int iNum1[210]; int iNum2[210]; int minus(int* p1, int* p2, int length1, int length2){ if(length1 < length2) return -1; int i; if(length1 == length2){ for(i = length1 -1; i >= 0; i --){ if(p1[i] < p2[i]) return -1; } } for(i = 0; i < length1; i++){ p1[i] -= p2[i]; if(p1[i] < 0){ p1[i] += 10; p1[i + 1] --; } } for(i = length1 -1; i >= 0; i--){ if(p1[i]) return i + 1; } return 0; } int main(){ int nCases; char cNum1[210]; char cNum2[210]; int result[210]; scanf("%d", &nCases); while(nCases--){ scanf("%s", cNum1); scanf("%s", cNum2); memset(iNum1, 0, sizeof(iNum1)); memset(iNum2, 0, sizeof(iNum2)); memset(result, 0, sizeof(result)); int i, j = 0; int length1 = strlen(cNum1); for(i = length1 - 1; i >= 0; i--){ iNum1[j] = cNum1[i] - '0'; j++; } j = 0; int length2 = strlen(cNum2); for(i = length2 - 1; i >= 0; i--){ iNum2[j] = cNum2[i] - '0'; j++; } length1 = minus(iNum1, iNum2, length1, length2); if(length1 < 0){ printf("0\n"); continue; } else if(length1 == 0){ printf("1\n"); continue; } result[0]++; int dis = length1 - length2; for(i = length1 -1; i >= 0; i--){ if(i >= dis) iNum2[i] = iNum2[i - dis]; else iNum2[i] = 0; } length2 = length1; for(i = 0; i <= dis;i ++){ int disTmp; while((disTmp = minus(iNum1, iNum2 + i, length1, length2 - i)) >= 0){ length1 = disTmp; result[dis - i]++; } } for(i = 0; i < 210; i++){ if(result[i] >= 10){ result[i + 1] += result[i] / 10; result[i] %= 10; } } int flag = 0; for(i = 209; i >= 0;i --){ if(flag) printf("%d", result[i]); else if(result[i]){ flag = 1; printf("%d", result[i]); } } printf("\n"); } return 0; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |