题目传送门

#include <bits/stdc++.h>
using namespace std;
void jia(string s1,string s2){
    bool aaa=0;
    int a[5010],b[5010],c[5010];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
	int la=s1.length();
	int lb=s2.length();
	int lc;
    if(la>lb){
		lc=la;
	}else{
		lc=lb;
	}
	for(int i=0;i<la;i++){
		a[la-i]=s1[i]-'0';
	}
	for(int i=0;i<lb;i++){
		b[lb-i]=s2[i]-'0';
	}
	for(int i=1;i<=lc;i++){
		c[i]=a[i]+b[i];
		if(aaa==1){
			c[i]++;
		}
		if(c[i]>=10){
			c[i]=c[i]-10;
			aaa=1;
		}else{
			aaa=0;
		}
	}
	if(aaa==1){
		lc++;
		c[lc]=1;
	}
	bool bbb=0;
	for(int i=lc;i>0;i--){
		if(c[i]==0&&bbb==0&&i>1){
		}else{
			cout<<c[i];
			bbb=1;
		}
	}
}
void jian(string s1,string s2){
	int l=0,l1=0,c[10005]={0},p=0;//每一位的差
	string a=s1,b=s2;
	a='0'+a;
	b='0'+b;//将第0位占0
	if(a.size()<b.size()||(a.size()==b.size()&&a<b))//假如a<b
	{
		cout<<'-';//结果为负数,先输出减号
		swap(a,b);//交换两个数(例如3-5可以变为0-(5-3)),这样子方便后面计算
	}
	l=a.size();
	l1=b.size();
	while(l1<l)//因为已经确保这时b<a了,所以直接在b前面添0
	{
		b='0'+b;
		l1++;
	}//利用c++的特性让个位对齐
	for(int i=1;i<l;i++)c[i]=a[i]-b[i];//计算差
	while(1)//用来退位,因为可能要多次退位,所以用while循环
	{
	p=1;//开关,用来看是否需要退位
	for(int i=1;i<l;i++)
	{
		if(c[i]<0)//需要退位
		{
			c[i-1]--;//向前一位退位
			c[i]=10+c[i];
			p=0;//开关置零,需要重新复查
		}
	}
	if(p)break;//不需要退位了,就退出
	}
	p=1;
	for(int i=1;i<l;i++){
		if(c[i]!=0)p=0;
		if(p==0)cout<<c[i];//特判前导0
	}
	if(p==1)cout<<0;//特判,可能结果本身就为0
}
void cheng(string s1,string s2){
	int a[300001]={0},b[300001]={0},i=0,x=0,len=0,j=0,c[300001]={0};
    a[0]=s1.length();b[0]=s2.length();//计算长度
    for (i=1;i<=a[0];++i)a[i]=s1[a[0]-i]-'0';//将字符串转换成数字
    for (i=1;i<=b[0];++i)b[i]=s2[b[0]-i]-'0';
    for (i=1;i<=a[0];++i)for (j=1;j<=b[0];++j)c[i+j-1]+=a[i]*b[j];//按乘法
    len=a[0]+b[0];                                       //原理进行高精乘
    for (i=1;i<len;++i)if (c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;}//进位
    while (c[len]==0&&len>1)len--;//判断位数
    for (i=len;i>=1;--i)cout <<c[i];//输出
}
void chu(string a,int b){
	int i=0,d=0;
	string c;
    for (;i<a.length();i++)a[i]-=48;   //字符串转数字
    for (i=0;i<a.length();i++)
        c.push_back((d*10+a[i])/b+48),d=(d*10+a[i])%b;  //模拟竖式
    for (i=0;c[0]==48;i++)c.erase(c.begin(),c.begin()+1);   //去0
    cout<<c;   //华丽的输出
}
int main(){
    string s1,s2;
    char q;
    cin>>s1>>q>>s2;
    while(1){}//抄袭可耻
    if(q=='+'){
        jia(s1,s2);
    }else if(q=='-'){
        jian(s1,s2);
    }else if(q=='*'){
        cheng(s1,s2);
    }else{
		int b;
		for(int i=0;i<s2.length();i++){
			b=b+s2[i]-'0';
			if(i!=s2.length()-1){
				b=b*10;
			}
		}
        chu(s1,b);
    }
    return 0;
}

原文地址:http://www.cnblogs.com/Zhao-zzZ/p/U255813_zhengchongtijie.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性