C++ 此给定代码应将给定的数字转换为最大可能的数字,方法是将适当的数字替换为9。此代码不起作用

C++ 此给定代码应将给定的数字转换为最大可能的数字,方法是将适当的数字替换为9。此代码不起作用,c++,C++,x和k分别是要转换的数字和要替换的数字。 函数int dig计算数字的位数 #include<iostream> using namespace std; int dig(long int n) { int m=0; while(n>0) { n=n/10; m++; } return m; } int main(void){ long long int x,f=1;//here x sho

x
k
分别是要转换的数字和要替换的数字。 函数
int dig
计算数字的位数

#include<iostream>
using namespace std;

int dig(long int n)
{
    int m=0;
    while(n>0)
    {
        n=n/10;
        m++;
    }
    return m;   
}

int main(void){
   long long int x,f=1;//here x should take an input upto 18 digits.
   int b=1,k,l,c,j=1,i,r;
   cin>>x;
   cin>>k;
   l=dig(x);
   c=l-k;
   for(i=1;i<=c;i++)
   {
      f=f*10;
   } 
   r=(x%f);
   for(i=1;i<=k;i++)
   {
      b=b*10;
   }    
   j=(b-1)*f;
   j=j+r;
   cout<<j;
   return 0;
}
#包括
使用名称空间std;
int-dig(长int-n)
{
int m=0;
而(n>0)
{
n=n/10;
m++;
}
返回m;
}
内部主(空){
long-long-int x,f=1;//此处x应接受最多18位的输入。
int b=1,k,l,c,j=1,i,r;
cin>>x;
cin>>k;
l=dig(x);
c=l-k;

对于(i=1;i读取代码,您的意图似乎是将(最多18位数字)x的前k位替换为9,从而得到结果的大数字?即输入12345678和4应给出99995678

如果是,请继续阅读。如果不是,请忽略此答案

代码中的逻辑是正确的,但由于精度损失,它无法处理18位数字;您的一些变量需要更改为长整数以支持18位数字。请注意编译器警告

此外,代码似乎不能正确处理x的负值,但这很容易修复(请参阅mul的使用)。它不能防止k太大,但这也是一个容易修复的问题

这里有一个修正版本:输入1234567889012345678和4得到9999567789012345678。希望这有帮助

#include<iostream>
using namespace std;

int dig(long long int n)
{
    int m = 0;
    while (n>0)
    {
        n = n / 10;
        m++;
    }
    return m;
}

int main(void) {
    long long int x, f = 1;//here x should take an input upto 18 digits.
    int b = 1, k, l, c;
    long long int j = 1;
    int i;
    long long int r;
    cin >> x;
    cin >> k;
    int mul = (x < 0) ? -1 : 1;
    x *= mul;
    l = dig(x);
    if (k > l)
    {
        k = l;
    }
    c = l - k;
    for (i = 1; i <= c; i++)
    {
        f = f * 10;
    }
    r = (x%f);
    for (i = 1; i <= k; i++)
    {
        b = b * 10;
    }
    j = (b - 1)*f;
    j = j + r;
    j *= mul;
    cout << j << endl;
    return 0;
}
#包括
使用名称空间std;
整型挖掘(长整型n)
{
int m=0;
而(n>0)
{
n=n/10;
m++;
}
返回m;
}
内部主(空){
long-long-int x,f=1;//此处x应接受最多18位的输入。
int b=1,k,l,c;
长整型j=1;
int i;
长整型r;
cin>>x;
cin>>k;
int-mul=(x<0)?-1:1;
x*=mul;
l=dig(x);
如果(k>l)
{
k=l;
}
c=l-k;

对于(i=1;i)
dig(0)
的结果是什么?函数
int-dig(long-int-n)
工作,它返回位数。因此
dig(0)将返回1
。我测试了代码,但不确定您想做什么。请您提供更多信息,或者举例说明您到底想做什么。然后回答会更容易。非常感谢。这真的很有帮助!!