大数运算

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即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值