模拟...
#include <stdio.h> #include <iostream> #include <string.h> using namespace std; #define maxn 10000 int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b); } int modNum(char* ch,int b) // 大数对整数的取模运算 { int left=0,i; for(i=-1; ch[i+1]!='\0'; ++i); for(int j=0; j<=i; ++j) { left = (left*10)%b+ch[j]-'0'; left %=b; } return left; } char* div(char *ch, int b) { // 大数对整数的相除运算 char ansdiv[1010] = "\0"; int cnt = 0, remain = 0; for (int i=0; ch[i]; ++i) { if (remain*10+ch[i]-'0' >= b) { // 够除 ansdiv[cnt++] = (remain*10 + ch[i]-'0')/b+'0'; remain = (remain*10 + ch[i]-'0')%b; } else if (cnt != 0){ ansdiv[cnt++] = '0'; // 否则添0 remain = remain*10 + ch[i] - '0'; } else remain = remain*10 + ch[i] - '0'; } if (remain && cnt==0) { ansdiv[0] = '0'; } return ansdiv; } char* multi(char *ch, int b) { // 大数和整数相乘 int i; int jinwei = 0; char ansdiv[1010]; for (i=-1; ch[i+1]; ++i); // i为字符串长度 int cnt = 0; for (int j=i; j>=0; --j) { int temp = (ch[j] - '0' + jinwei) * b; ansdiv[cnt++] = temp % 10 + '0'; temp = temp / 10; } while(jinwei) { ansdiv[cnt++] = jinwei % 10; jinwei /= 10; } ansdiv[cnt++] = '\0'; return ansdiv; } int main() { int mod; int b; char res[210]; char *ans; while(cin >> res >> b) { // 除法运算 ans = div(res, b); cout << ans << "...\n"; // 乘法运算 ans = multi(res, b); int len = strlen(ans); for (int i=len-1; i>=0; --i) { cout << ans[i]; } cout << "---\n"; //取模运算 int ansmod = modNum(res, b); cout << ansmod << "....\n"; } return 0; }