聚聚的Rating目标
题目描述
聚聚今晚又在玩某大型多人开黑(?)写bug游戏,聚聚的评价是:寄,掉大分!(事实上聚聚每次这样说最后都会上大分)。出Rating(分数)后聚聚会设定新的Rating目标。聚聚认为如果一个数字的各位数字中非零数字不超过 1 个,则该数可以被作为一个Rating目标。
比如,600,10000,7 都是合理的Rating目标,而 12,3001,12345 则不是。
现在,聚聚知道自己的Rating,记作n,请你告诉聚聚距离下一个Rating目标还差多少分?
输入
一行,一个正整数n,且n<=100000
输出
一行,一个正整数,表示当前Rating距离下一个Rating目标有多少分。
样例输入 Copy
2021
样例输出 Copy
979
提示
样例解释:2021的下一个Rating目标是3000,相差979分
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
scanf ("%d",&n);
int m;
m=n;
int s;
int sss;
int i=0;
double ss;
int p;
while (m>0)
{
m=m/10;
i++;
}
if(n<=9)
{
printf ("1");
}
else
{
ss=pow(10,i-1);
sss=ss;
s=((n/sss)+1)*sss;
p=s-n;
printf ("%d",p);
}
return 0;
}
我前面已经算出来n的位数了,就是i的值,
第一个if那里是假如n<=9的时候,根据题目的意思,我们只需要输出1就行了,这个还是比较好理解的。
else后面ss的值就是10的i-1次方,假如我们输入的值是2021,那么i就等于4,ss就等于1000,
但是ss的值我们是用的pow算的,pow的数据类型是double,所以对应的ss就是double类型,下面我们要用2021/1000,
假设我们不改变ss的数据类型的话,2021/1000=2.201,但是我想要的数是2,所以我需要把ss转换成整型的,这样2021/1000=2,
输入2021我们对应要输入的值就是3000-2021=979,
所以我要2021/1000=2之后,2再加1=3,3再乘于我们之前得到的1000,这样就得出来3000了,在程序里面我让s的值为3000,
同理的话不管我们输入哪个数,原理跟过程都是一样的,
p是我们要输出的值,也就是之前算出来的s减去我们之前输入的n