目录
6-1数字判断
分数 100
全屏浏览
切换布局
作者 scs
单位 北京邮电大学
请写一个函数,该函数可以判断一个非负整数的每一位数字是不是从右到左严格递增的。比如54321即满足这个条件;但221就不满足。
特别提醒,如果一个非负整数只有1位我们认为它是严格递增的。
输入格式
第1行是一个正整数n( (n < 30),后面跟着n行输入,每行一个整数,代表n个待判断的非负整数。测试用例保证合法且所有整数都可以用int存储。
输出格式
输出包含n行,每行都是一个整数,依此对应输入中n个待判断的非负整数的判断结果(函数返回值)。
函数接口定义:
int judge( int n );
其中 n 是用户传入的参数,代表待判断整数。当n 是从右到左严格递增时函数须返回 0,否则函数返回从右到左第一次违反严格递增的那个数字的位数(个位为第1位,十位为第2位,依此类推)。
裁判测试程序样例:
#include<stdio.h>
int judge(int) ;
int main()
{
int i , n , num;
scanf( "%d" , &n );
for ( i = 0 ; i < n ; i++ )
{
scanf( "%d" , &num );
printf( "%d\n" , judge(num) );
}
return 0 ;
}
/* 请在这里填写答案 */
输入样例:
2
12345
54321
输出样例:
2
0
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
answer1:
int judge(int n)
{
int number = n;
int len = 0;
while(number != 0)
{
len++;
number = number / 10;
}
int flag = 1;
int i = 1;
if(len == 1)
{
return 0;
}
else
{
while((n / 10) != 0)
{
int a = n % 10;
n = n / 10;
int b = n % 10;
i++;
if(a >= b)
{
flag = 0;
return i;
}
}
if(flag == 1) return 0;
}
}
ps:感觉我用一个求数字位数的函数只为了判断是否是1位数是小题大做,简直是太蠢了,不妨用n/10是否为0来就行判断,和后面也有呼应一点
answer2:
int judge(int n)
{
int flag = 1;
int i = 1;
if((n / 10) == 0)
{
return 0;
}
else
{
while((n / 10) != 0)
{
int a = n % 10;
n = n / 10;
int b = n % 10;
i++;
if(a >= b)
{
flag = 0;
return i;
}
}
if(flag == 1) return 0;
}
}
6-2 数制
记数是人类用来表示和计算数量的基本方法。在记数过程中,我们通常使用一系列有序的符号或数字来表示数量。这些符号或数字可以是简单的(如手指计数),也可以是复杂的(如现代数学中的数字系统)。这里有一个非常重要的概念就是数制。数制中表示数值大小的那些固定的数字符号称为数码。每种数制所使用数码的个数称为该进制数的基数。比如十进制的基数为10,二进制的基数为2。一个数码处在不同位置上所代表的值不 同,每个数码所表示的数值等于该数码乘以一个与数码所在位置相关的常数,这个常数叫做位权。位权的大小是以该数制的基数为底、数码所在位置的序号为指数的整数次幂。例如:二进制数101,左边的数码1的位权是22,中间的数码0的位权是21,右边的数码1的位权是20。十进制数12.1,小数点前面的数码1的位权是101,数码2的位权是100,小数点后面的数码1的位权是10−1。
事实上对于任意一个R进制数都可以表示为该数制的数码与基数的幂次的乘积之和,即对任意的R进制数an−1an−2…a1a0a−1a−2…a−m,都可以表示成按位权展开的多项式之和的形式:an−1×Rn−1+an−2×Rn−2+…+a1×R1+a0×R0+a−1×R−1+a−2×R−2+…+a−m×R−m。其中,R是数制的基数,ai (i = -m,…,-2,-1,0,1.,…,n-1) 为该数制的数码,n为该R进制数的整数部分的位数,m为小数部分的位数。
尽管不同进制在表示数值时使用的数字和进位规则不同,但它们都可以表示相同的数值范围,只是表示方式和长度不同。因此,在理论上讲,各种进制是等价的。
现给定十进制正整数,和一个进制的基数(10进制表示),请你写一个函数将这个正整数变为该进制的数码与基数的幂次的乘积之和。
输入:
第一行为一个整数T(0<T<100),代表共T组测试用例。后边是T行,每行均为两个用一个空格分隔的整数,依次代表待处理十进制整数n(0<n<100000000),和基数base(1<base<100)。测试用例保证合法。
输出:
若干行,每组测试用例的格式都是一样的,先输出测试用例的序号(见输出样例),然后幂次从小到大的顺序输出多项式中每一项的数码和权值(用一个空格分隔),每行输出一项(具体见输出样例),如果数码为0,则不输出该项。
样例解释:
第一组测试用例,10进制整数12345可以表示为 5×100+4×101+3×102+2×103+1×104 ,即 12345 = 5 + 40 + 300 + 2000 + 10000 。
第二组测试用例,10进制整数12345可以表示为 1×20+1×23+1×24+1×25+1×212+1×213 (1 ,2,6,7,8 ,9 ,10,11次幂所乘的数码均为0,所以没有输出), 即12345 = 1 + 8 + 16 + 32 + 4096 + 8192 。(特别的,由于二进制的数码只有0和1两个,因此任意一个正整数都可以惟一的表示为若干个2的幂次之和。)
函数接口定义:
void printBasePower( int number , int base ) ;
其中 number 和 base 都是用户传入的参数。number 代表待处理10进制正整数; base 是进制的基数。函数没有返回值,但要按要求输出结果。
裁判测试程序样例:
#include <stdio.h>
void printBasePower( int number , int base ) ;
int main()
{
int


1081

被折叠的 条评论
为什么被折叠?



