#include<iostream>
using namespace std;
void deleteZero(string& str);
bool checkString(string a, string b);
int check(string a, string b);
string operator-(string a, string b);
int main()
{
string a, b;
while (cin >> a >> b) {
string ans = "";
deleteZero(a);
deleteZero(b);
if (check(a, b) == 1) {
cout << 1 << endl;
continue;
}
else if (check(a, b) == 2) {
cout << 0 << endl;
continue;
}
else {
int len = b.length();
string str = a.substr(0, len);
//cout << "str = " << str << endl;
for (int i = len; i <= a.length(); i++) { //2376 24
int count = 0;
while (checkString(str, b)) {
str = str - b;
count++;
}
char ch = count + '0';
ans = ans + ch;
str = str + a[i];
}
deleteZero(ans);
cout << ans << endl;
//continue;
}
}
return 0;
}
string operator-(string a, string b) {
string ans = "";
int lenOfa = a.length();
int lenOfb = b.length();
if (lenOfa > lenOfb) {
for (int i = 0; i < lenOfa - lenOfb; i++) {
b = '0' + b;
}
}
else {
for (int i = 0; i < lenOfb - lenOfa; i++) {
a = '0' + a;
}
}
int dq = 0;
int len = a.length();
for (int i = len - 1; i >= 0; i--) {
int num = a[i] - b[i] - dq;
if (num < 0) {
dq = 1;
num += 10;
}
else {
dq = 0;
}
char ch = num + '0';
ans = ch + ans;
}
deleteZero(ans);
return ans;
}
void deleteZero(string& str) {
int index = 0;
while (str[index] == '0') index++;
if (index == str.length())
str.erase(0, index - 1);
else str.erase(0, index);
}
int check(string a, string b) {
if (a == b) { return 1; }
else if (!checkString(a, b)) {
return 2;
}
return 3;
}
bool checkString(string a, string b) {
if (a.length() == b.length()) {
return a >= b;
}
else if (a.length() < b.length()) {
return false;
}
else {
return true;
}
}
你代码有什么问题吗?
下面是大数相减和相除的代码,:
#include <iostream>
#include <string>
using namespace std;
#define MAXNUM (int)300
//去除前面的0
void movePreZero(char c[])
{
int i;
while(c[0]=='0')
{
for(i=0;i<strlen(c)-1;i++)
c[i]=c[i+1];
c[strlen(c)-1] = 0;
}
}
//显示字符串
void print(char c[])
{
int i=0;
int flag = 0;
for (i=0;c[i]!='\0';i++)
{
if(c[i]!='0')
flag = 1;
if(flag)
cout <<c[i];
else
cout << " ";
}
cout << endl;
}
//大数相减,成功返回1,a<b返回0
int bigSub(char a[],char b[],char c[])
{
int i=0;
int shift = 0,val;
int l1 = strlen(a);
int l2 = strlen(b);
if(l1<l2)
{
c[0]=0;
return 0;
}
//b后移l1-l2位,并且前面补0
for(i=l2-1;i>=0;i--)
b[i+l1-l2] = b[i];
for(i=0;i<l1-l2;i++)
b[i] = '0';
//逐位相减
i = l1-1;
c[l1] = 0;
while(i>=0)
{
val = a[i]-b[i]-shift;
if(val<0)
{
val += 10;
shift = 1;
}else
shift = 0;
c[i] = '0'+val;
i--;
}
if(shift)
{
c[0] =0;
return 0;
}
//去除前面的0
movePreZero(c);
//去除b前面的0
movePreZero(b);
//printf("%s",c);
if(strlen(c)==0)
{
c[0] ='0'; //留1个0
c[1] = 0;
}
return 1;
}
//大数相除 a/b
void bigdiv(char* a,char* b,char* c)
{
int i,t=0;
int index = 0;
int flag = 0;
int l1 =strlen(a);
int l2 =strlen(b);
char tmp[MAXNUM]={0};
char sz[MAXNUM];
strcpy(sz,a);
sz[l2]=0;
t = l2;
while( t <= l1)
{
c[index] = 0;
flag = 0;
while(bigSub(sz,b,tmp))
{
if(c[index]==0)
c[index] = '1';
else
c[index] += 1;
flag = 1;
strcpy(sz,tmp);
}
if(flag)
index++;
//sz后面增加a
i = strlen(sz);
sz[i] = a[t];
sz[i+1]=0;
//print(sz);
t++;
}
c[index] = 0;
movePreZero(c);
if(strlen(c)==0)
{
c[0] ='0'; //留1个0
c[1] = 0;
}
//printf("%s",c);
}
int main()
{
char a[MAXNUM]={0},b[MAXNUM]={0},c[MAXNUM]={0};
cin >> a >> b;
bigdiv(a,b,c);
print(c);
return 0;
}