3.高精度(字符串处理)
1.高精加
#include <iostream>
#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
string str;
string str1,str2;
cin>>str1>>str2;
int len1=str1.length();
int len2=str2.length();
//前面补0,弄成长度相同
if(len1<len2)
{
for(int i=1;i<=len2-len1;i++)
str1="0"+str1;
}
else
{
for(int i=1;i<=len1-len2;i++)
str2="0"+str2;
}
len1=str1.length();
int cf=0;
int temp;
for(int i=len1-1;i>=0;i--)
{
//下面赋值运算符右面的式子从左向右算
//str[i]-"0",是一个数字的字符减去字符0,这样就把一个字符等价地转化成了一个数字
temp=str1[i]-'0'+str2[i]-'0'+cf;
cf=temp/10;
temp%=10;
str=char(temp+'0')+str;
}
if(cf!=0) str=char(cf+'0')+str;
cout<<str;
}
2.高精乘
#include <iostream>
#include <string>
using namespace std;
string add(string str1,string str2)//高精度加法
{
string str;
int len1=str1.length();
int len2=str2.length();
//前面补0,弄成长度相同
if(len1<len2)
{
for(int i=1;i<=len2-len1;i++)
str1="0"+str1;
}
else
{
for(int i=1;i<=len1-len2;i++)
str2="0"+str2;
}
len1=str1.length();
int cf=0;
int temp;
for(int i=len1-1;i>=0;i--)
{
temp=str1[i]-'0'+str2[i]-'0'+cf;
cf=temp/10;
temp%=10;
str=char(temp+'0')+str;
}
if(cf!=0) str=char(cf+'0')+str;
return str;
}
int main(int argc, const char * argv[]) {
string str1 , str2;
cin>>str1>>str2;
int len1 = str1.length();
int len2 = str2.length();
string answer;
for(int i=len2-1;i>=0;i--)
{
string str;
int cf=0;
int temp;
for(int j=len1-1;j>=0;j--)
{
temp = (str1[j]-'0')*(str2[i]-'0')+cf;
cf = temp/10;
temp= temp%10;
str=char(temp+'0')+str;
}
if(cf!=0)
str=char(cf+'0')+str;
for(int k=1;k<=len2-i-1;k++)
str=str+'0';
answer=add(answer,str);
}
for(int i=0;i<=answer.length()-1;i++)
{
if(answer[i]!='0')
{
cout<<answer;
return 0;
}
}
cout<<0;
return 0;
}