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

时间:2016-12-23 17:58:21

标签: c implementation

这次你的任务很简单。

给定两个整数X和K,找到可以通过改变数字x中最近K个位置的数字来形成的最大数字。

输入:

输入的第一行包含两个整数X和K. K由单个空格分隔。

输出:

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

约束:

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

2 个答案:

答案 0 :(得分:1)

无需计算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;
}

答案 1 :(得分: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] = '\0';
        printf("%s\n", line);
    }
    free (line);
    return 0;
}

测试

 ./a.out
169232736841900368 4
999992736841900368