【题目描述】
输入一个大于0的大整数N,长度不超过100位,要求输出其除以13得到的商和余数。
【输入】
一个大于0的大整数,长度不超过100位。
【输出】
两行,分别为整数除法得到的商和余数。
【输入样例】
2132104848488485
【输出样例】
164008065268345 0
#include<stdio.h> #include<string.h> int digit; void sub(int num[], int b[], int len1,int len2) { for (int i = 0; i < len1; i++) { if (num[i] < b[i]) { num[i] = num[i] + 10 - b[i]; num[i + 1]--; } else { num[i] -= b[i]; } } for (int i = len1 - 1; i >= 0; i--) { if (num[i]) { digit = i + 1; break; } } } int jugde(int num[], int b[], int len1, int len2) { if (len1 < len2) return -1; else if (len1 == len2) { for (int i = len1-1; i >= 0; i--) { if (num[i] == b[i]) continue; if (num[i] > b[i]) return 1; if (num[i] < b[i]) return -1; } return 0; } } int main() { char a[101]; int num[101]; int z[101]; int b[101] = { 3,1 }; scanf("%s", a); int len1 = strlen(a), len2 = 2; int len; int temp; int i, j; for (i = len1 - 1,j = 0; i >= 0; i--) { num[j++] = a[i] - '0'; } int k = 1; if (len1 < len2) { printf("0\n"); puts(a); } else { len = len1 - len2; for (i = len1 - 1; i >= 0; i--) { if (i >= len) b[i] = b[i - len]; else b[i] = 0; } len2 = len1; digit = len1; for (j = 0; j <= len; j++) { z[len - j] = 0; while (((temp = jugde(num, b, len1, len2)) >= 0) && digit >= k) { sub(num, b, len1, len2); z[len - j]++; len1 = digit; if (len1 < len2 && b[len2 - 1] == 0) len2--; } if (temp < 0) { for (i = 1; i < len2; i++) { b[i - 1] = b[i]; } b[i - 1] = 0; if (len1 < len2) len2--; } } for (i = len; i > 0; i--) { if (z[i]) break; } for (; i >= 0; i--) { printf("%d", z[i]); } printf("\n"); for (i = len1; i > 0; i--) { if (num[i]) break; } for (; i >= 0; i--) { printf("%d", num[i]); } } return 0; }
一本通 1175:除以13
最新推荐文章于 2023-11-29 10:04:06 发布