UVa 355 - The Bases Are Loaded

题目:进制转换,加上合法判断。

分析:数论。先转化成十进制,再转化成对应的进制,输出即可。

base进制转化成十进制:顺序乘以base加和;

十进制转base进制:逆序输出模base的余数。

说明:注意值时0的情况。

#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

char number1[11];

int ctoi( char ch )
{
	if ( ch >= '0' && ch <= '9' )
		return ch - '0';
	else return ch - 'A' + 10;
}

char itoc( int v )
{
	if ( v < 10 ) return v + '0';
	else return v + 'A' - 10;
}

void dtob2( long long v, int b2 )
{
	if ( v ) {
		dtob2( v/b2, b2 );
		printf("%c",itoc(v%b2));
	}
}

int main()
{
	int base1,base2;
	while (~scanf("%d%d%s",&base1,&base2,number1)) {
		//非法判断
		int flag = 0;
		for ( int i = 0 ; number1[i] ; ++ i )
			if ( ctoi(number1[i]) >= base1 )
				flag = 1;
		if ( flag ) {
			printf("%s is an illegal base %d number\n",number1,base1);
			continue;
		}
		//转化成10进制的值
		long long value = 0LL;
		for ( int i = 0 ; number1[i] ; ++ i ) {
			value *= base1;
			value += ctoi(number1[i]);
		}
		//转化成base2进制数
		printf("%s base %d = ",number1,base1);
		if (value == 0LL) printf("0");
		else dtob2(value, base2);
		printf(" base %d\n",base2);
	}
	return 0;
}
时间: 2024-10-11 03:50:09

UVa 355 - The Bases Are Loaded的相关文章

Uva 12216 How Many bases? (数学题)

12216 - How Many bases? Time limit: 3.000 seconds A classical problem of number theory is "Find the number of trailing zeroes in NM, in base B". This problem is quite conventional and easy. But a number can have same number of trailing zeroes in

UVa 414 - Machined Surfaces

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=355 题目:每行25个字符,左开始为X,右边也是X,中间为空格B:当所有行的左右X相互向内移动,直到有一行左右X相遇:这时所有行中间一共还有多少空格B. 思路:中间空格最少的行一定最先相遇,即X最多的行最先相遇:当X最多行相遇时,每行减少的空格数相同,则用X最

UVA 437 十九 The Tower of Babylon

The Tower of Babylon Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 437 Appoint description:  System Crawler  (2015-08-29) Description Perhaps you have heard of the legend of the Tower of Babylon. No

M_LROOT,LD_LIBRARY_PATH, “Not all extension Dlls were loaded”问题原因及解决方法

最近在需要在云主机上进行压力测试,所以需要Linux的Agent. 一.安装:教程可以百度,大概步骤如下: 1.Upload Linux.zip to 指定的机器 2.解压,chmod 777 $Linux/installer.sh 3.执行Linux下的installer.sh 按照提示安装下去即可. 二.环境变量配置(基于bsh) 1.在/opt/HP/HP_LoadGenerator/新增env.sh文件,内容如下: #!/bin/bsh export PRODUCT_DIR="/opt/

Fast Matrix Operations(UVA)11992

UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x1<=x2,y1<=y2)子矩阵中的所有元素add上val: 2 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x1<=x2,y1<=y2)子矩阵中的所有元素set为val: 3 x1 y1 x2 y2 val 表示输

UVa 568 Just the Facts

A过去后看了一下别人的解法,发现除了打表还有一种数论的方法. 分析一下阶乘后面的0是怎么出现的呢,当然是2乘5得到的. 我们将1~N先放在一个数组里面. 从数组第一个元素开始,先统计一下N!中因子为5的个数记为count,将其除去,然后再除去count个2.这样一来的话把所有元素乘起来后就不会出现10的倍数了. 当然并不是真正的乘起来,那样的话肯定是要溢出的,因为只关心最后一位数,所以每次乘完后求10的余数即可. 我的做法是打表,因为题目里给了N <= 10000的条件限制,所以可以把1~100

uva 10261

F - Ferry Loading Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 10261 Description Problem E: Ferry Loading Before bridges were common, ferries were used to transport cars across rivers. River ferrie

win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法

今天与大家分享一个自己的学习笔记,希望能给遇到同样问题的人带来帮助. 不知道大家在win7 64位系统下用 PB连接oracle数据库时,是否遇到过“oracle library oci.dll could not be loaded”问题. 今天,在win7 64位系统下用 PB连接oracle数据库时,一直出现上述错误,在百度上找了很久,都没有找到一个完整的解决方案,咨询了很多人,(他们都说是我的PB和oracle没装好,但我装的时候没出现任何问题,一切都很顺利,而且PB和oracle都能正

UVA 562 Dividing coins --01背包的变形

01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 50007 int c[102],d