每日一九度之题目1016:火星A+B
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:5346
解决:1464
- 题目描述:
-
读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进 制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位 数是3进制的,百位数是5进制的,千位数是7进制的……
- 输入:
-
测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
- 输出:
-
对每个测试用例输出1行,即火星表示法的A+B的值。
- 样例输入:
-
1,0 2,1
4,2,0 1,2,0
1 10,6,4,2,1
0 0
- 样例输出:
-
1,0,1
1,1,1,0
1,0,0,0,0,0
一开始看到题目,其实我是蒙 bility的
后来看到大神的讲解之后才明白是个怎么的解法。
其实和大整数的加法差不多,只是进制是不停在变的。最开始是用的字符串做的,前面两组数据过了,但是,后面那组出现了问题,没有考虑到两位数字的情况。
但是如果要考虑两个数字,那样用字符串做便显得很麻烦,于是就用数组做了,真的简单很多。。
代码如下:
//Asimple
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <stack>
#include <cmath>
#include <string>
#include <queue>
#define INF 100000
using namespace std;
const int maxn = ;
typedef long long ll ;
int n, m;
int p[]={,,,,,,,,,,,,,,,,,,,,,,,,,};
int a[],b[],sum[]; int main(){
int m,n,i,j,k,add,x,y,max;
char c;
while( true ){
for(i=;i<=;i++){
a[i]=;
b[i]=;
sum[i]=;
}
for(i=;i<=;i++){
scanf("%d",&a[i]);
scanf("%c",&c);
if(c==' ') break;
}m=i;
for(i=;i<=;i++){
scanf("%d",&b[i]);
scanf("%c",&c);
if(c=='\n') break;
}n=i;
if(a[]==&&b[]==)break;
k=m>n?m:n;
for(i=,add=,max=k;i<=max;i++){
if(m>=)x=a[m--];
else x=;
if(n>=)y=b[n--];
else y=;
sum[k--]=(x+y+add)%p[i];
add=(x+y+add)/p[i];
}
sum[]=add;
if(sum[]!=) printf("%d,",sum[]);
for(i=;i<max;i++) printf("%d,",sum[i]);
printf("%d\n",sum[max]);
}
return ;
}
贴上我用字符串做的代码,想改的可以尝试下:
//Asimple
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <stack>
#include <cmath>
#include <string>
#include <queue>
#define INF 100000
using namespace std;
const int maxn = ;
typedef long long ll ;
int n, m;
char s1[maxn], s2[maxn];
int a[] = {,,,,,,,,,
,,,,,,,,
,,,,,,,};
int sum[maxn]; int main(){
while( ~ scanf("%s %s",s1,s2) ){
int len1 = strlen(s1);
int len2 = strlen(s2);
if( len1 == && s1[] == '' && len2 == && s2[] == '' ) break;
n = ;
int c = ;
int i = len1-;
int j = len2-;
for(; i>=&&j>=; i--,j--){
if( isdigit(s1[i]) && isdigit(s2[j]) ){//改这里 :改成能够判断多位数字
sum[n] = (s1[i]-'') + (s2[j]-'') + c;
if( (s1[i]-'') + (s2[j]-'') + c >= a[n] ){
c = ;
sum[n] -= a[n];
} else {
c = ;
}
n ++ ;
}
}
for(; i>=; i--){
if( isdigit(s1[i]) ){//改这里 :改成能够判断多位数字
sum[n] = s1[i] - '' + c;
if( s1[i] - '' + c >= a[n] ){
c = ;
sum[n] -= a[n];
} else {
c = ;
}
n ++ ;
}
}
for(; j>=; j--){
if( isdigit(s2[j]) ){//改这里 :改成能够判断多位数字
sum[n] = s2[j] - '' + c;if( s2[j] - '' + c >= a[n] ){
c = ;
sum[n] -= a[n];
} else {
c = ;
}
n ++ ;
}
}
if( c == ){
sum[n] = ;
n ++ ;
}
for(int k=n-; k>=; k--){
printf(k==?"%d\n":"%d,",sum[k]);
}
}
return ;
}
每日一九度之题目1016:火星A+B的更多相关文章
- 九度oj 题目1016:火星A+B
题目描述: 读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数.例如:地球上的10进制数2,在火星上记为“1,0”,因为 ...
- 每日一九度之 题目1076:N的阶乘
时间限制:3 秒 内存限制:128 兆 特殊判题:否 提交:7601 解决:2749 题目描述: 输入一个正整数N,输出N的阶乘. 输入: 正整数N(0<=N<=1000) 输出: 输入可 ...
- 每日一九度之 题目1043:Day of Week
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7336 解决:2563 题目描述: We now use the Gregorian style of dating in Russia. ...
- 每日一九度之 题目1042:Coincidence
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3007 解决:1638 题目描述: Find a longest common subsequence of two strings. 输入 ...
- 每日一九度之 题目1041:Simple Sorting
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4883 解决:1860 题目描述: You are given an unsorted array of integer numbers. ...
- 每日一九度之 题目1040:Prime Number
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6732 解决:2738 题目描述: Output the k-th prime number. 输入: k≤10000 输出: The k- ...
- 每日一九度之 题目1038:Sum of Factorials
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2109 解决:901 题目描述: John von Neumann, b. Dec. 28, 1903, d. Feb. 8, 1957, ...
- 每日一九度之 题目1039:Zero-complexity Transposition
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3372 解决:1392 题目描述: You are given a sequence of integer numbers. Zero-co ...
- 每日一九度之 题目1033:继续xxx定律
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5502 解决:1351 题目描述: 当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数, ...
随机推荐
- swift 同步加载图片
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- Oracle sqlldr导入导出txt数据文件详解
一.sqlldr导入txt 1.预备 a).txt文件 这里要保存成无签名的UTF-8 b).oracle建表 2.编写控制文件input_test.ctl LOAD DATA CHARACTERSE ...
- Jenkins自动构建
Jenkins is an award-winning, cross-platform, continuous integration and continuous delivery applicat ...
- Swift游戏实战-跑酷熊猫 14 熊猫打滚
这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样 ...
- 转:python webdriver API 之 验证码问题
对于 web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测 ...
- 最大密集子图(01分数规划+二分+最小割)POJ3155
题意:给出一副连通图,求出一个子图令g=sigma(E)/sigma(V); h[g]=sigma(E)-g*sigma(V):设G是最优值 则当h[g]>0:g<G h[g]<0, ...
- ACRush 楼天成回忆录
楼教主回忆录: 利用假期空闲之时,将这几年 GCJ , ACM , TopCoder 参加的一些重要比赛作个回顾.首先是 GCJ2006 的回忆. Google Code Jam 2006 一波三折: ...
- nyist 240 小明的调查统计(二)
http://acm.nyist.net/JudgeOnline/problem.php?pid=240 小明的调查统计(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:1 ...
- android 添加背景音乐
MediaPlayer mediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.qiji); mediaPlayer.start();
- FRM-92101解决办法
/u02/UAT/inst/apps/UAT_newerp3/logs/ora/10.1.3/opmn/forms_default_group_1/ http://blog.csdn.net/orth ...