UVA 10494 - If We Were a Child Again(大数与整型相除取整和取余)
2013-01-03 16:27
453 查看
这道题让选手模拟相除和取余的过程,由于除数为整型,使得这道题的难度大大减小。要注意在模拟取余和相处的时候,中间的临时数会超过整型范围。
提供一个数据:21474836447 / 2147483647
提供一个数据:21474836447 / 2147483647
#include <stdio.h> #include <string.h> // 大数字符串str与整型x相除,商赋给str void myDiv(char str[], int x) { int b[10000], len = strlen(str); for (int i=0; i<len; i++) b[i] = str[i] - '0'; long long cp = 0; // 注意这里的long long for (int i=0; i<len; i++) { long long tmp = b[i] + cp*10; // 注意这里的long long b[i] = tmp / x; cp = tmp % x; } // 修正前面的0然后将结果赋给str字符串 int i = 0, j; while (i<len && 0==b[i]) i++; if (i == len) { str[0] = '0'; str[1] = '\0'; } else { for (j=i, i=0; j<len; j++) str[i++] = b[j] + '0'; str[i] = '\0'; } } // 大数字符串str与整型x取余,余数返回 int myMod(char str[], int x) { int len = strlen(str); long long tmp = 0; // 注意这里的long long for (int i=0; i<len; i++) { tmp = tmp*10 + str[i]-'0'; tmp %= x; } return tmp; } int main() { char str[10000], ch[5]; int n; while (scanf("%s %s %d", str, ch, &n) != EOF) { if (ch[0] == '/') { myDiv(str, n); printf("%s\n",str); } else { int x = myMod(str, n); printf("%d\n", x); } } return 0; }
相关文章推荐
- △UVA10494 - If We Were a Child Again(大数和整型数的除法、取余)
- UVA 10494-If We Were a Child Again(大数除法及取余)
- (高精度运算4.7.27)UVA 10494 If We Were a Child Again(大数除法&&大数取余)
- Uva 10494 - If We Were a Child Again(大数相除)
- (高精度运算4.7.27)UVA 10494 If We Were a Child Again(大数除法&&大数取余)
- Uva 10494 If We Were a Child Again(高精度相除)
- UVA 10494 - If We Were a Child Again(高精度除法和取余)
- UVA 10494 - If We Were a Child Again(大数除法和取模)
- UVA 10494 If We Were a Child Again(大数)
- UVA 10494 - If We Were a Child Again(高精度除法和取余)
- uva 10494 - If We Were a Child Again 大数除法和取余
- UVA - 10494 If We Were a Child Again
- UVA - 10494 If We Were a Child Again
- UVa 10494 - If We Were a Child Again
- UVA 10494 - If We Were a Child Again
- UVA - 10494 If We Were a Child Again
- Uva 10494 If We Were a Child Again
- UVa 10494 - If We Were a Child Again
- UVA 10494 If We Were a Child Again 解题报告
- UVA - 10494 - If We Were a Child Again