声明:写法是多样的,下面仅仅是我比较喜欢的写法。另外,这里的除法是高精/低精。实际题目里面,反正我没见过高精/高精的。
A+B:
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
#define ll long long
int a[110],b[110],c[110];
int main(){char cs1[110],cs2[110];cin>>cs1>>cs2;for(int i=0;i<strlen(cs1);i++){a[strlen(cs1)-i-1]=cs1[i]-'0';}for(int i=0;i<strlen(cs2);i++){b[strlen(cs2)-i-1]=cs2[i]-'0';}int len=max(strlen(cs1),strlen(cs2));for(int i=0;i<len;i++){c[i]+=a[i]+b[i];//暂时 c[i+1]=c[i]/10;//进位 c[i]=c[i]%10;//本位 }//是否存在进位int add=0;if(c[len]) add=1;for(int i=len-1+add;i>=0;i--){cout<<c[i];}return 0;
}
A/B:(逐位试商法,要去掉前面多余的0)
#include <bits/stdc++.h>
using namespace std;
int main(){string s;int b;cin>>s>>b;int a[1010],c[1010];for(int i=0;i<s.size();i++){//数字 a[i]=s[i]-'0';}int carry = 0;for(int i=0;i<s.size();i++){c[i] = (carry*10+a[i])/b;//除法 carry = (carry*10+a[i])%b;//余数}int j=0;while(c[j]==0){//将前置0去掉j++;} int flag = 0;for(int i=j;i<s.size();i++){cout<<c[i];flag = 1;}if(!flag) cout << "0";cout << " " << carry;return 0;
}