hdu1002–大数加法模板题
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
#include<math.h>
#include<cstdio>
//#include<bits/stdc++.h>提交时这块不注释掉会CE
using namespace std;
vector<int>a,b,c;
void add(string s1,string s2)
{
reverse(s1.begin(),s1.end());//字符反转存放,便于写加法
reverse(s2.begin(),s2.end());
if(s1.length()<s2.length())swap(s1,s2);//总是使得长度长的在前面,之前不加这句一直wa,还是不太明白为什么一定要这句??
for(int i=0;i<max(s1.length(),s1.length());i++){
if(i<s1.length())a.push_back(s1[i]-'0');//一定要-‘0’,定义的容器是int型,string型要转换成int型存放
if(i<s2.length())b.push_back(s2[i]-'0');
}
int t=0;//处理进位
for(int i=0;i<max(a.size(),b.size());i++){
if(i<min(a.size(),b.size()))t+=a[i]+b[i];
if(i>=a.size())t+=b[i];
if(i>=b.size())t+=a[i];
c.push_back(t%10);
t/=10;
}
if(t)c.push_back(t);
}
int main()
{
string s1;
string s2;
int T;
cin>>T;
int kase=0;
while(T--){
cin>>s1>>s2;
add(s1,s2);
printf("Case %d:\n",++kase);//一定要注意输出格式,别忘记打空格
cout<<s1<<" + "<<s2<<" = ";
while(!c.empty()){
printf("%d",c.back());
c.pop_back();
}
printf("\n");
if(T)printf("\n");//每两组测试样例中间要有一个空行,最后一个测试样例不用继续加空行,否则会pe
a.clear();
b.clear();
c.clear();
}
//system("pause");
return 0;
}
51nod1005 大数加法模板题(c++要判断符号位)
以下是Java版本
package cn.test;
import java.util.*;
//import java.lang.*;
import java.math.*;
import java.io.*;
public class Big {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
BigInteger a=in.nextBigInteger();
BigInteger b=in.nextBigInteger();
System.out.println(a.add(b));
}
}
hdu1212大数取模
//package cn.test;Java代码在oj提交要去掉包名
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {//oj提交这里不要写别的名字为类名,就用Main
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
while(in.hasNextBigInteger()) {
BigInteger a=in.nextBigInteger();
BigInteger b=in.nextBigInteger();
System.out.println(a.mod(b));
}
}
}
51nod1027—大数乘法,直接JavaBigInteger类,add改成multiply即可
51nod1028----同上
51nod1029—大数除法Java版本add改成divide即可