题目地址http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1435
前面一个是大数需要字符串来存 后面一个定义long型就够了 计算的时候就是边做边把字符转换为数字
取余比较简单一点 可以边转边取余 转完输出结果就行了
除法 模拟手算 从头找 找第一个能被它整除的那一位 找到之后 就依次除就行了 除的结果存在一个整型数组里
#include <stdio.h> #include <stdlib.h> #include<string.h> int main() { long x, i, j, k ,s; int y,flag,r[1001]; char c[1001],p; while(scanf("%s %c %ld", c, &p, &x)!=EOF) { s = 0; y = 1; j = 0; k = strlen(c); if(p == '/') { flag = 0;//标记一个变量 找到第一个之后 依次除下去 for(i = 0 ; i < k ; i++) { s= s*10+c[i]-'0'; if(s>=x&&flag == 0) { r[j++] = s/x; s = s%x; flag = 1; } else if(flag) { r[j++] = s/x; s = s%x; } } flag = 0; for(i = 0 ; i < j ; i++) { printf("%d",r[i]); flag = 1; } if(flag == 0) printf("0"); puts(""); } else { s = 0; for(i = 0 ; i < k; i++) { s = s*10+c[i]-'0'; s = s%x; } printf("%ld\n", s); }
View Code
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include<string.h> 4 int main() 5 { 6 long x, i, j, k ,s; 7 int y,flag,r[1001]; 8 char c[1001],p; 9 while(scanf("%s %c %ld", c, &p, &x)!=EOF) 10 { 11 s = 0; 12 y = 1; 13 j = 0; 14 k = strlen(c); 15 if(p == '/') 16 { 17 flag = 0;//标记一个变量 找到第一个之后 依次除下去 18 for(i = 0 ; i < k ; i++) 19 { 20 s= s*10+c[i]-'0'; 21 if(s>=x&&flag == 0) 22 { 23 r[j++] = s/x; 24 s = s%x; 25 flag = 1; 26 } 27 else 28 if(flag) 29 { 30 r[j++] = s/x; 31 s = s%x; 32 } 33 } 34 flag = 0; 35 for(i = 0 ; i < j ; i++) 36 { 37 printf("%d",r[i]); 38 flag = 1; 39 } 40 if(flag == 0) 41 printf("0"); 42 puts(""); 43 } 44 else 45 { 46 s = 0; 47 for(i = 0 ; i < k; i++) 48 { 49 s = s*10+c[i]-'0'; 50 s = s%x; 51 } 52 printf("%ld\n", s); 53 } 54 } 55 return 0; 56 }