【发布时间】:2016-12-23 17:58:21
【问题描述】:
这次你的任务很简单。
给定两个整数 X 和 K ,找出在 x 中最多 K 位改变数字可以形成的最大数。
输入:
输入的第一行包含两个整数 X 和 K K 由一个空格分隔。
输出:
打印单行中形成的最大数字。
约束:
1
0
代码 -
int main()
{
long long x ;
scanf("%llu" , &x);
int k ;
scanf("%d" , &k);
long long max = (int)log10(x) + 1 ;
int arr[max] ;
long long temp = x ;
long long i ;
for(i = max -1 ; i >= 0 ; i-- )
{
arr[i] = temp % 10 ;
temp = temp / 10 ;
}
i = 0 ;
int cnt = k ;
while(cnt != 0)
{
if(arr[i] != 9)
{
arr[i] = 9 ;
cnt = cnt - 1 ;
}
i = i + 1 ;
}
int power = max -1 ;
long long answer = 0 ;
for(i = 0 ; i < max ; i++)
{
answer = answer + arr[i] * pow(10,power) ;
power = power -1 ;
}
printf("%llu" , answer );
return 0;
}
获得部分正确的输出
给定输入的错误输出 -
242358001399388784 9
169232736841900368 4
正确的输出 -
14500679550767648 1
8330936799410214 9
【问题讨论】:
-
我自己还没有让它工作,但一方面,你正在将你的
long longs 读写为 un_signed,但将它们保存到 _signed @987654323 @s 在您的代码中。这可能就是标志的来源。 -
在 printf 中将“llu”更改为“ll”让我得到零分,甚至没有一个正确
-
仔细查看
printf的手册。%ll不是格式化 long long 整数的合适方法;这只是一个精度规格。 -
试过“lld”还是一样的结果
-
你能提供一些带有 i/p 和 o/p 的示例测试用例吗?
标签: c implementation