大数加减乘除
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");
}
#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");
}
相关文章推荐
- 大数加减乘除幂模版
- hdu4927 Series 1(大数加减乘除)
- 大数运算之加减乘除
- c++实现大数加减乘除四则运算
- 大数加减乘除
- 算法 大数计算:加减乘除,模,阶乘,进制转换(大数除法取余)
- C++语言使用字符数组实现大数加减乘除运算
- 【数据结构与算法】String大数加减乘除(非负整数)
- 关于大数加减乘除方面的感想
- 大数加减乘除等的模板以及1000以内阶乘的模板
- (模板)c++ 大数(正数加减乘除)
- Java 大数加减乘除 hdu 5047
- 每日一练——大数加减乘除运算实现
- 使用String模拟大数加减乘除(除法和取余待补充)
- hdu 4927 Series 1 (大数模板加减乘除)
- 大数(高精度)加减乘除
- 大数加减乘除?
- 大数运算实现加减乘除四则运算
- uva 10494(大数加减乘除取余一条龙模板代码) uva 10023 (大数开方)
- 大数高精度加减乘除 51nod 1005 大数加法