输入一个正整数,求出它是几位数

C语言:输入一个正整数,求出它是几位数

并将其按倒序输出如:123,输出为321.

 

#include <stdio.h>
int Show(int x)//判断位数
{
    int n=0;
    while(x!=0)
    {
        n++;
        x/=10;    //x=x/10
    }
    
    return n;

}

int Show2(int x)//将数翻转
{
    while(x)
    {
        printf("%d ",x%10);
        x/=10;
    }

}

int main()

{

    int m ;
    m=Show(123);
    printf("%d\n",m);
    Show2 (123);
    return 0;

}

用循环实现

 

 

 

<think>我们需要读入一个正整数,然后计算它的位数。可以通过转换为字符串求长度,也可以通过循环除以10来计算。这里提供两种方法:循环除10和字符串转换方法。注意:输入应该是正整数,但为了健壮性,我们可以检查输入是否有效。</think> ### 计算正整数位数及原数输出 以下是两种方法实现"输入正整数输出原数及其位数"的功能: #### 方法1:使用整数运算(避免字符串转换) ```c #include <stdio.h> int main() { unsigned int num; int digits = 0; // 输入正整数 printf("请输入一个正整数: "); scanf("%u", &num); // 存储原数 unsigned int original = num; // 计算位数(处理0的情况) if (num == 0) { digits = 1; } else { while (num != 0) { digits++; num /= 10; // 每次循环除以10相当于右移一位 } } // 输出结果 printf("原数: %u\n", original); printf("位数: %d\n", digits); return 0; } ``` #### 方法2:使用字符串转换(更直观) ```c #include <stdio.h> #include <string.h> #include <ctype.h> int main() { char input[20]; // 假设最大输入20位整数 // 输入验证循环 while(1) { printf("请输入一个正整数: "); if (scanf("%19s", input) != 1) { // 清除输入缓冲区 while(getchar() != '\n'); printf("输入无效,请重试!\n"); continue; } // 验证输入是否全为数字 int valid = 1; for (int i = 0; input[i] != '\0'; i++) { if (!isdigit((unsigned char)input[i])) { valid = 0; break; } } if (valid && strlen(input) > 0) { break; } printf("输入无效,请重试!\n"); } // 输出结果 printf("原数: %s\n", input); printf("位数: %zu\n", strlen(input)); return 0; } ``` ### 代码解释: 1. **方法1(整数运算)**: - 基本原理:通过不断除以10(每次减少一位)计算除法次数 - 特殊处理:对0的边界情况单独处理(0是1位数) - 优点:不依赖额外库函数,内存占用小 - 缺点:会修改原始输入值,需要额外变量存储原数 2. **方法2(字符串转换)**: - 基本原理:将输入作为字符串处理,直接计算字符串长度 - 输入验证:使用`isdigit()`检查每个字符是否为数字 - 优点:保留原始输入格式(包括前导零),可处理超大数字 - 缺点:需要字符数组存储输入,有缓冲区溢出风险 3. **输入验证**: - 整数法:使用`%u`格式指定符保证输入正整数 - 字符串法:使用`%19s`限制输入长度防止溢出 - 循环验证:确保用户输入有效数字 4. **数据类型选择**: - 使用`unsigned int`避免负整数问题 - 字符串长度限制在19位(带结束符`\0`) - 使用`size_t`存储字符串长度(适合平台相关长度) 5. **边界情况处理**: - 输入为0的情况 - 超大数字输入(字符串法更安全) - 前导零处理(如输入"00123") ### 示例输出: ``` 请输入一个正整数: 12345 原数: 12345 位数: 5 ``` ``` 请输入一个正整数: 0 原数: 0 位数: 1 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值