题目1016:火星A+B(进制新问题)

题目链接:http://ac.jobdu.com/problem.php?pid=1016

详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus

参考代码:

//
//  1016 火星A+B.cpp
//  Jobdu
//
//  Created by PengFei_Zheng on 28/04/2017.
//  Copyright © 2017 PengFei_Zheng. All rights reserved.
//

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstring>
#include <cmath>
#define MAX_PRIME 30
#define MAX_SIZE 26
//#define debug

using namespace std;

int prime[MAX_PRIME];

bool isPrime(int x){
    if(x<=1) return false;
    if(x==2) return true;
    int tmp = sqrt(x)+1;
    for(int i = 2 ; i <= tmp ; i++){
        if(x%i==0)
            return false;
    }
    return true;
}

void calPrime(){
    int num = 0;
    for(int i = 2 ; num<25 ; i++){
        if(isPrime(i)){
            num++;
            prime[num] = i;
        }
    }
}

int a[MAX_SIZE];
int b[MAX_SIZE];
int sum[MAX_SIZE];
char c;
int lena, lenb, i, j;

void init(){
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(sum, 0, sizeof(sum));
    c=‘ ‘;
    lena=lenb=i=j=0;
}
int main(){
    calPrime();
#ifdef debug
    for(int i = 1 ; i < MAX_PRIME ; i++){
        cout<<i<<" is : "<<prime[i]<<endl;
    }
#endif
//    freopen("/Users/pengfei_zheng/Desktop/input.txt", "r", stdin);
    while(1){
        init();
        char c;

        for(i = 1 ; i < MAX_SIZE ; i++){
            scanf("%d",&a[i]);
            scanf("%c",&c);
            if(c==‘ ‘)break;
        }
        lena = i;
        for(j = 1 ; j < MAX_SIZE ; j++){
            scanf("%d",&b[j]);
            scanf("%c",&c);
            if(c==‘\n‘)break;
        }
        lenb = j;
        if(a[1]==0 && b[1]==0)
            break;

        int maxLen = lena>=lenb ? lena : lenb;

        int carry=0;
        int len = maxLen;
        int x,y;
        for(i = 1 ; i <= maxLen; i++){
            if(lena>=1) x=a[lena--];
            else x=0;
            if(lenb>=1) y=b[lenb--];
            else y=0;
            sum[len--]=(x+y+carry)%prime[i];
            carry=(x+y+carry)/prime[i];
        }
        if(carry!=0){
            printf("%d,",carry);
        }
        for(i = 1 ; i < maxLen ; i++){
            printf("%d,",sum[i]);
        }
        printf("%d\n",sum[maxLen]);
    }
    return 0;
}
/**************************************************************
    Problem: 1016
    User: zpfbuaa
    Language: C++
    Result: Accepted
    Time:10 ms
    Memory:1532 kb
****************************************************************/
时间: 2024-12-21 11:30:32

题目1016:火星A+B(进制新问题)的相关文章

九度oj 题目1080:进制转换

题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36). 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出. 输出: 输出X的N进制表示的数. 样例输入: 16 10 F 样例输出: 15 提示: 输入时字母部分为大写,输出时为小写,并且有大数据. 这题初看起来另我头疼,考虑不难但是很麻烦 一开始想的比较绕,准备先把任意进制转换成10进制,再转化成n进制,于是写出了下面的代码 1 #include

九度OJ题目1080:进制转换(java)使用BigInteger进行进制转换

题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36). 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出. 输出: 输出X的N进制表示的数. 样例输入: 16 10 F 样例输出: 15 提示: 输入时字母部分为大写,输出时为小写,并且有大数据. package a; import java.math.BigInteger; import java.util.*; public class Mai

- &gt;code vs 1475 m进制转十进制

1475 m进制转十进制 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转换后的十进制数<=100 输入描述 Input Description 共一行 n和m 输出描述 Output Description 共一个数 表示m进制的n化成十进制的数 样例输入 Sample Input 1010 2 样例输出 Sample Output 10 数据范围

1475 m进制转十进制

题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转换后的十进制数<=100 输入描述 Input Description 共一行 n和m 输出描述 Output Description 共一个数 表示m进制的n化成十进制的数 样例输入 Sample Input 1010 2 样例输出 Sample Output 10 数据范围及提示 Data Size & Hint 乘权累加法 本题比那道将十进制转换为m进制的题目还要简单,因为最后转化成的就是我们

4.m进制转十进制

Strlen是字符串有多长就是多长,包括所有的元素和\0这个结束符 题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转换后的十进制数<=100 输入描述 Input Description 共一行 n和m 输出描述 Output Description 共一个数 表示m进制的n化成十进制的数 样例输入 Sample Input 1010 2 样例输出 Sample Output 10 数据范围及提示 Data Size & Hint 乘权累加法 代

【ACM】大数据+任意进制转换 jobdu 1080

[九度OJ] 1080 进制转换 题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36).下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出. 输出: 输出X的N进制表示的数. 样例输入: 16 10 F 样例输出: 15 提示: 输入时字母部分为大写,输出时为小写,并且有大数据. 这题考察的比较综合,进制转换+大数据 很久没有做ACM的题目了,且拿这个练练手,大整数模板是用的王道论坛的模板-贴出来备

codevs 进制转换类型x

进制转换 1.计算机中采用二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供有利途径.节省设备等优点,为了便于描述,又长用八.十六进制作为二进制的缩写,一般技术都采用进位计数,其特点: (1)逢N进一,N是每种进位计数制表示一位数所需要符号数目为基数. 二进制:逢二进一,借一当二 八进制:逢八进一,借一当八 十六进制:........ (2)数制转换 不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的,若转换前两

codevs1475 m进制转十进制

题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转换后的十进制数<=100 输入描述 Input Description 共一行 n和m 输出描述 Output Description 共一个数 表示m进制的n化成十进制的数 样例输入 Sample Input 1010 2 样例输出 Sample Output 10 数据范围及提示 Data Size & Hint 乘权累加法 #include <bits/stdc++.h>//万能头

m进制转十进制

1475 m进制转十进制 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转换后的十进制数<=100 输入描述 Input Description 共一行 n和m 输出描述 Output Description 共一个数 表示m进制的n化成十进制的数 样例输入 Sample Input 1010 2 样例输出 Sample Output 10 #include<