为什么我的某些输入在 C 代码中得到错误答案?

why do I get wrong answer in c code for some of the input?

这次你的任务很简单。

给定两个整数 X 和 K ,找出 x 中至多 K 位的数字可以改变的最大数字。

输入:

第一行输入两个整数X和K K 由单个 space.

分隔

输出:

打印一行中形成的最大数字。

限制条件:

1 < X < 10^18

0 < K < 9

代码 -

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

无需计算 answer。您可以简单地通过打印数组来绕过它。

#include<bits/stdc++.h>
int main()
{
long long int x ;
scanf("%lld" , &x);

int k ;
scanf("%d", &k);

long long int max = (int)log10(x) + 1 ;

int arr[max] ;


long long int  temp = x ;
long long int  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 ;

}

// JUST PRINT THE ARRAY
for(i=0;i<max;i++)
    printf("%d",arr[i]);
return 0;
}

这个程序似乎可以解决您的问题。您只需从字符串左侧添加正确数量的 9:s 即可。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char *line = NULL;  /* forces getline to allocate with malloc */
    size_t len = 0;     /* ignored when line = NULL */
    ssize_t read;
    while ((read = getline(&line, &len, stdin)) != -1) {
        int loop = atoi(&(line[strlen (line) - 2]));
        for (int i = 0; i< loop; i++) {
            if (line[i] == '9')
                loop++;
            else line[i] = '9';
        }
        line[strlen(line)-2] = '[=10=]';
        printf("%s\n", line);
    }
    free (line);
    return 0;
}

测试

 ./a.out
169232736841900368 4
999992736841900368