Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 整数长度未知时保持前导零_C_Integer_Reverse - Fatal编程技术网

C 整数长度未知时保持前导零

C 整数长度未知时保持前导零,c,integer,reverse,C,Integer,Reverse,以下程序反转用户输入。但是,对于带有尾随零的数字,在打印反向数字时,零将被“忽略” #包括 内部主(空) { int n,反向编号=0,余数; printf(“输入一个整数:”); scanf(“%d”和“&n”); 而(n!=0) { 余数=n%10; 反向编号=反向编号*10+余数; n/=10; } printf(“反向编号=%d\n”,反向编号); 返回0; } 由于用户输入的整数长度未知,我们如何打印所有尾随零,例如: 输入一个整数:3000 反向编号=0003 整数长度未知 它不

以下程序反转用户输入。但是,对于带有尾随零的数字,在打印反向数字时,零将被“忽略”

#包括
内部主(空)
{
int n,反向编号=0,余数;
printf(“输入一个整数:”);
scanf(“%d”和“&n”);
而(n!=0)
{
余数=n%10;
反向编号=反向编号*10+余数;
n/=10;
}
printf(“反向编号=%d\n”,反向编号);
返回0;
}
由于用户输入的整数长度未知,我们如何打印所有尾随零,例如:

输入一个整数:3000
反向编号=0003
整数长度未知

它不是。:-)

计算迭代次数,并将其作为宽度传递给对
printf
的最终调用

#include<stdio.h>

int main(void)
{
   int n, reversedNumber = 0, remainder;

   printf("Enter an integer: ");
   scanf("%d", &n);

   {
     size_t i = (0 > n);

     while (n != 0)
     {
       remainder = n % 10;
       reversedNumber = reversedNumber * 10 + remainder;
       n /= 10;
       ++i;
     }

     printf("Reversed Number = %0*d\n", (int) i, reversedNumber); /* Alternatively
                                            to the cast you can define i as int. */
   }

   return 0; 
}
#包括
内部主(空)
{
int n,反向编号=0,余数;
printf(“输入一个整数:”);
scanf(“%d”和“&n”);
{
大小i=(0>n);
而(n!=0)
{
余数=n%10;
反向编号=反向编号*10+余数;
n/=10;
++一,;
}
printf(“反向编号=%0*d\n”,(int)i,反向编号);/*或者
对于cast,可以将i定义为int*/
}
返回0;
}
发件人:

4每个转换规范都由字符%引入。在%之后,将依次显示以下内容:

[……]

  • 可选的最小字段宽度。如果转换后的值的字符数少于字段宽度,则在字段宽度的左侧(或右侧,如果已给出后面介绍的左侧调整标志)填充空格(默认情况下)。字段宽度采用星号*(稍后介绍)或非负十进制整数的形式。[…])
[……]

5如上所述,字段宽度[…]可用星号表示。在本例中,int参数提供字段宽度或精度。指定字段宽度[…]的参数应(按该顺序)出现在要转换的参数(如果有)之前

[……]

你应该使用char数组(string),因为它的一般数学规则<强>我们没有考虑左边<0/强> 0。

#include <stdio.h>
#include <string.h>
int main(){
    char value[]="3000";
    printf(" Number : %s ",value);
    char *rev=strrev(value);
    printf("Reversed Number = %s ",rev);
    return 0;
}
#包括
#包括
int main(){
字符值[]=“3000”;
printf(“编号:%s”,值);
char*rev=strrev(值);
printf(“反向编号=%s”,版次);
返回0;
}
由于用户输入的整数长度未知,如何打印所有尾随的零

可以知道整数文本长度。使用
“%n”
记录扫描到该点的偏移量


要以数字方式反转字符串(显然可以进行简单的文本反转),请记录输入的长度

打印时,使用
“%0*u”
确保根据需要预先挂起前导零

样本运行

Enter an integer: 00123000
Reversed Number = 00032100

既然最终目标是“从原始数字的第二位到最后一位开始添加原始数字的位数”,那么为什么要使用字符(字符串)——只使用数字

如果我正确理解你的问题:

/* test.c sum the digits of a number -- except for the last digit */

#include <stdio.h>

int main (void)
{
    int number;
    printf ("\nenter a number: ");
    scanf ("%i", &number);

    // power = multiple of 10 matching left-most digit in number
    // power is also a loop counter of sorts
    int power = 1;
    while ( number / power > 9 ) 
        power *= 10;    

    // process each digit moving from left to right across number
    // addition is commutative (order of digits does not affect result)

    int sum = 0;
    do {
        int digit = number / power;

        if ( power != 1 )           // skip last digit in number
            sum += digit;    

        number %= power;            // drop left-most digit from number
        power /= 10;                // adjust multiple of 10
    }
    while ( power > 0 );

    printf ("sum (skipping last digit) = %i\n", sum);

    return 0;
}
/*test.c对数字的位数求和——最后一位除外*/
#包括
内部主(空)
{
整数;
printf(“\n输入一个数字:”);
scanf(“%i”和编号);
//幂=数字中最左边匹配的10位数的倍数
//电源也是一种循环计数器
整数幂=1;
同时(数量/功率>9)
功率*=10;
//处理数字上从左向右移动的每个数字
//加法是可交换的(数字顺序不影响结果)
整数和=0;
做{
整数位数=数字/功率;
if(power!=1)//跳过数字中的最后一位
总和+=位数;
number%=幂;//从数字中删除最左边的数字
功率//=10;//调整10的倍数
}
而(功率>0);
printf(“总和(跳过最后一位)=%i\n”,总和);
返回0;
}

将其作为字符串阅读,然后将字符串反转。我之前已经这样做了,也许我需要为问题添加一些上下文。目标是从原始数字的第二位到最后一位添加原始数字的位数。这意味着将字符串转换回整数将丢失前导零@AndrewHenle@daumie所以,你问怎么做,但那不是你真正的问题?你需要明确你想知道什么。alk提供的答案准确地回答了问题。Getting:警告:字段宽度的类型应为“int”,但参数的类型为“size_t”(又名“unsigned long”)[-Wformat],并且我注意到添加了一个额外的零,例如3000被反转为00003。是的,您是正确的。我更正并注释了代码。请参阅我的负数修复。太好了!我忽略了负数。现在一切正常。谢谢。
strev()
不是C,而是一些特定于供应商的扩展。
/* test.c sum the digits of a number -- except for the last digit */

#include <stdio.h>

int main (void)
{
    int number;
    printf ("\nenter a number: ");
    scanf ("%i", &number);

    // power = multiple of 10 matching left-most digit in number
    // power is also a loop counter of sorts
    int power = 1;
    while ( number / power > 9 ) 
        power *= 10;    

    // process each digit moving from left to right across number
    // addition is commutative (order of digits does not affect result)

    int sum = 0;
    do {
        int digit = number / power;

        if ( power != 1 )           // skip last digit in number
            sum += digit;    

        number %= power;            // drop left-most digit from number
        power /= 10;                // adjust multiple of 10
    }
    while ( power > 0 );

    printf ("sum (skipping last digit) = %i\n", sum);

    return 0;
}