A除以B
题目描述
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式
在1行中依次输出Q和R,中间以1空格分隔。
样例
输入数据#1
123456789050987654321 7
Copy
输出数据#1
17636684150141093474 3
#include<bits/stdc++.h>
using namespace std;
int b,c[10001],t=0,f,d[10001];
int main()
{
string a;
cin>>a>>b;
int la=a.size(),i,p;
for(i=0;i<=la-1;i++)
{
t=t*10+a[i]-48;
c[i]=t/b;d[i]=t/b;
t=t%b;
}
for(i=0;i<=la-1;i++)
{
if(c[i]!=0)
{
p=i;
f=1;
break;
}
}
if(f==1)
{
for(i=p;i<=la-1;i++)
{
cout<<c[i];
}cout<<" "<<t;
}
else
{
cout << 0;cout<<" "<<t;
}
return 0;
}
高精度乘法
题目描述
求两个正整数之积
输入格式
共两行,每行一个正整数,每个数小于1000位
输出格式
求两整数的积
样例
输入数据#1
12
12
Copy
输出数据#1
144
#include<bits/stdc++.h>
using namespace std;
int p,a[1010],b[1010],c[2010];
int k=0,t=0;
string s21,s22;
int main(){
cin>>s21>>s22;
if(s21=="0"||s22=="0")
{
cout << 0;
return 0;
}
int len1=s21.size(),len2=s22.size();
for(int i=len1-1;i>=0;i--)
{
a[k]=s21[i]-48;
k++;
}
for(int i=len2-1;i>=0;i--)
{
b[t]=s22[i]-48;
t++;
}
for(int i=0;i<=len1-1;i++)
{
for(int j=0;j<=len2-1;j++)
{
c[i+j]=c[i+j]+a[i]*b[j];
}
}
int len=s21.size()+s22.size();
for(int i=0;i<len;i++)
{
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
for(int i=len;i>=0;i--)
{
if(c[i]!=0)
{
p=i;break;
}
}
for(int i=p;i>=0;i--)
{
cout<<c[i];
}
return 0;
}
高精度加法
题目描述
计算两个非负整数之和
输入格式
从键盘上输入两个非负整数,每个数占一行,每个数的位数不超过240.
输出格式
输出只有一行为两个数之和。
样例
输入数据#1
12
13
Copy
输出数据#1
25
//***wuhaotian***//
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[250],b[250],c[250];
int k=0,t=0,p;
int main(){
cin >> s1>> s2;
int len1=s1.size(),len2=s2.size(),len;
for(int i=len1-1;i>=0;i--)
{
a[k]=s1[i]-48;
k++;
}
for(int i=len2-1;i>=0;i--)
{
b[t]=s2[i]-48;
t++;
}
len=max(len1,len2);
for(int i=0;i<len;i++)
{
c[i]=a[i]+b[i];
}
for(int i=0;i<len;i++)
{
if(c[i]>=10)
{
c[i+1]=c[i+1]+c[i]/10;c[i]=c[i]%10;
}
}
for(int i=len;i>=0;i--)
{
if(c[i] != 0)
{
p=i;
break;
}
}
for(int i=p;i>=0;i--)
{
cout << c[i];
}
}
高精度减法
题目描述
计算两个非负整数之差
输入格式
从键盘上输入两个非负整数,每个数占一行,每个数的位数不超过240.
输出格式
输出只有一行为两个数之差。
样例
输入数据#1
12
13
输出数据#1
-1
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[260],b[260],c[260];
int main(){
int k=0,t=0,p=0;
char f='-';
cin >> s1>> s2;
int len1= s1.size(),len2=s2.size();
if(len1<len2 || len1==len2&&s1<s2)
{
cout <<f;
swap(s1,s2);
}
len1= s1.size(),len2=s2.size();
for(int i=len1-1;i>=0;i--)
{
a[k]=s1[i]-'0';
k++;
}
for(int i=len2-1;i>=0;i--)
{
b[t]=s2[i]-'0';
t++;
}
for(int i=0;i<len1;i++)
{
if(a[i]<b[i]){
a[i+1]-=1;
a[i]=a[i]+10;
}
c[i]=a[i]-b[i];
}
for(int i=len1-1;i>=0;i--)
{
if(c[i]!=0)
{
p=i;
break;
}
}
for(int i=p;i>=0;i--)
{
cout << c[i];
}
}
【基础】求2的n次方
题目描述
求2的n次方!(0≤n≤200)
输入格式
从键盘读入一个整数n。
输出格式
请输出2的n次方。
样例
输入数据#1
100
Copy
输出数据#1
1267650600228229401496703205376
#include<bits/stdc++.h>
using namespace std;
string mul(string s1, string s2)
{
string s;
int a[1000]={0},b[1000]={0},c[2000]={0},t=0,p;
int len1=s1.size(),len2=1;//注意长度在外面定义
for(int i=len1-1;i>=0;i--){
a[t]=s1[i]-48;
t++;
}
b[0]=2;
for(int i=0;i<=len1-1;i++){
for(int j=0;j<=len2-1;j++){
//第i位和第j位相乘的结果一定是对应在i+j位
//一定要注意是+=,因为某一位上可能存放着多组乘积
c[i+j]=c[i+j]+a[i]*b[j];
}
}
int len=s1.size()+s2.size();//结果的长度最长a.size()+b.size()
for(int i=0;i<len;i++){//处理进位
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
for(int i=len;i>=0;i--){
if(c[i]!=0){ p=i;break;}//找出最高不为0的位置
}
for(int i=p;i>=0;i--){
s += c[i]+48;
}
return s;
}
int main()
{
string ans = "1",str2 = "2";
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
ans = mul(ans,str2);
}
cout<<ans;
}