hdu-1877(大数+进制转换)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1877

思路:注意考虑0,0的情况。

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int m,a,b;
string s1,s2;
string add(string s1,string s2)
{
    if(s1.length()<s2.length())
    {
        string tp=s1;s1=s2;s2=tp;
    }
    int i,j,l1=s1.length(),l2=s2.length();
    for(i=l1-1,j=l2-1;i>=0;i--,j--)
    {
        s1[i]=(char)(s1[i]+(j>=0?s2[j]-‘0‘:0));
        if(s1[i]-‘0‘>=m)
        {
            s1[i]=(char)((s1[i]-‘0‘)%m+‘0‘);
            if(i) s1[i-1]++;
            else s1="1"+s1;
        }
    }
    return s1;
}
string f(int x)
{
    string s2="";
    int i,j,tp;
    while(x)
    {
        tp=x%m;
        x/=m;
        s2+=(char)(tp+‘0‘);
    }
    reverse(s2.begin(),s2.end());
    //cout<<s2<<endl;
    return s2;
}
int main(void)
{
    while(cin>>m&&m)
    {
        cin>>a>>b;
        if(a+b==0)
        {
            cout<<0<<endl;continue;
        }
        s1=f(a);
        s2=f(b);
        cout<<add(s1,s2)<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/2018zxy/p/9824680.html

时间: 2024-10-15 06:06:20

hdu-1877(大数+进制转换)的相关文章

大数进制转换问题

在数据结构课关于栈的这一章中,我们都学过用"模2取余法"来将一个10进制数转换为一个二进制数,进而可以推广到"模n取余法",经其转换为n进制(n任意指定). 确实,这是一个很基础的题目,可你是否想过如果这个10进制数是一个大数(其位数可能上千位,此时用一般数据类型肯定是会溢出的),那么这个问题又如何来求解呢? 当然,也许你会说很简单嘛,自己写一个大数类(当然至少要写一个大数除法才行),或者你用的是Java这种现代化语言,就更轻松了,直接用BigInteger这样的大

大数进制转换

给出一个36进制的大数(0-9,A-Z),将其转为10进制并输出. Input输入:36进制的大数,每一位用0-9,A-Z来表示,A表示10,Z表示35.(A的长度 <= 100000)Output输出:该数的10进制表示Sample Input 1AZ Sample Output 1691 起初做大数据处理的题目,并没有什么功底,就是突然想到可以用数组,所以再次做到这类题时,仍然记得用数组存位,最后倒着输出就好 所以原始是这么写的 超时代码1 #include <iostream> #

POJ1220(大数进制转换)

NUMBER BASE CONVERSION Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4652   Accepted: 2132 Description Write a program to convert numbers in one base to numbers in a second base. There are 62 different digits: { 0-9,A-Z,a-z } HINT: If

hdu 2031(进制转换升级版)

1.这里有零的时候 2.考虑负数 3.就是考虑大于10的情况 #include <iostream> #include <cstdio> using namespace std; int a[100005]; int n,m; int main() { while(~scanf("%d %d",&n,&m)) { if(n==0) cout<<0; else if(n>0) { int i=0; while(n>0) {

hdu 5142(数学-进制转换)

NPY and FFT Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 799    Accepted Submission(s): 492 Problem Description A boy named NPY is learning FFT algorithm now.In that algorithm,he needs to do

hdu 4937 Lucky Number ( 进制转换+枚举 )

题意: 有一个数n,问有多少个进制x(基数)使得n转换为x进制后的数字中只有3.4.5.6四个数. 算法: 对于只有一位数的情况,显然3.4.5.6都应该输出-1. 如果有2位数,假设这2位中高位为a,低位为b,进制为base,则 n = a * base + b,解一元一次方程即可. 如果有3位数,假设这3为从高到低分别为a.b.c,进制为base,则 n = a * base * base + b * base + c,即一元二次方程即可. 如果位数>= 4,可以暴力枚举进制数.base>

枚举 + 进制转换 --- hdu 4937 Lucky Number

Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 294    Accepted Submission(s): 49 Problem Description “Ladies and Gentlemen, It’s show time! ” “A thief is a creative artist who ta

hdu 2031 进制转换

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2031 题目大意:进制转换,先变成十进制在进行进制间的转化. 1 #include<stdio.h> 2 int main() 3 { 4 int n,m,i,j,f,p; 5 char a[200]; 6 while(scanf("%d%d",&n,&m)!=EOF) 7 { 8 i=0; 9 p=0; 10 if(n<0) 11 { 12 p=-1; 1

HDU 4937 Lucky Number (数学,进制转换)

题目 参考自博客:http://blog.csdn.net/a601025382s/article/details/38517783 //string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last); //把[first0,last0)之间的部分替换成[first,last)之间的字符串 /* 题意: 我们将3,4,5,6认为是幸运数字.给定一个十进制数n. 现在可以讲起任意转