您的位置:首页 > 其它

大数加减乘除

2016-09-07 18:03 120 查看
#include <iostream>
#include <string>
using namespace std;
string sub(string s1, string s2);
string add(string s1, string s2)
{
if (s1.length() < s2.length())
{
string temp = s1;
s1 = s2;
s2 = temp;
}
for (int i = s1.length()-1,j=s2.length()-1; i >= 0; i--,j--)
{
s1[i] = s1[i] + (j>=0 ? s2[j]-'0' : 0);
if (i > 0 && s1[i] > '9') { s1[i] = ((s1[i] - '0')%10)+'0'; s1[i - 1]++; }
if (i == 0 && s1[i] > '9') { s1[i] = ((s1[i] - '0') % 10) + '0'; s1 = '1' + s1; }

}
return s1;
}

//类似这种200+(-100)
string signedAdd(string s1, string s2)
{
string s3;
if (s2[0] == '-')
{
s2[0] = '0';
s3=sub(s1, s2);
}
else
{
s3=add(s1, s2);
}
return s3;

}

string sub(string s1, string s2)
{
cout << "s1" << s1 << endl;
cout << "s2" << s2 << endl;
int lend = 0;;
if (s1.length() < s2.length())
{
string temp=s1;
s1 = s2;
s2 = temp;
}
for (int i = s1.length() - 1,j=s2.length()-1; i >= 0; i--,j--)
{

s1[i] = s1[i] - lend;
char s22 = j >= 0 ? s2[j] : '0';
if ((s1[i] - s22) >= 0)
s1[i] = s1[i] - s22+'0';
else
{
s1[i] = s1[i] + 10;
lend = 1;
s1[i] = s1[i] - s22+'0';
}

}
return s1;
}

string multiply(string s, int n)
{
int temp = 0;
for (int i = s.length() - 1; i >= 0; i--)
{
s[i] = (s[i] - '0')*n+'0'+temp;
if (i >= 1 && s[i] > '9')
{
temp = (s[i] - '0') / 10;
s[i] = (s[i] - '0') % 10 + '0';

}
if (i == 0 && s[i] > '9')
{
temp = (s[i] - '0') / 10;
s[i] = (s[i] - '0') % 10 + '0';
s = char('0'+temp) + s;
}
}

return s;
}
//大数除法:
string divid(string s, int n)
{
int cmp = 0;
string result = "";
for (int i = 0; i <= s.length() - 1; i++)
{
cmp = cmp * 10 + s[i] - '0';
if (cmp >= n)
{
int temp = cmp / n;
cmp = cmp%n;
result = result+char(temp + '0') ;
}
else
{
result = '0' + result;
}

}
return result;

}

void main()
{
string s1 = "-10";
string s2 = "100";
int n = 25;
string s3 =signedAdd(s2, s1);
cout << s3 << endl;
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: