某一个输入的位数不确定的正整数按照标准的三位分节格式输出

题目描述:

编写程序,将某一个输入的位数不确定的正整数按照标准的三位分节格式输出,例如,当用户输入82668634时,程序应该输出82,668,634。

编程,一个良好的思维极其重要。

首先分析输入:输入是一个多位数(int型)

输出分析:82,668,634为一个字符串

思考:如何处理这个多位数?怎么样处理才能使用里面的数字。这时候对于十进制的多位数往往是采用除以10取余数,一位一位的提取出来。

例如:123

123/10= 12*****3

12/10 = 1******2

1/10  = 0******1

这样就能把1,2,3以倒叙的方式提取出来,再使用cstring库中的strrev使字符串颠倒过来,这样就变成了1 2 3以单个元素的形式存储在内存单元里。

这里我们注意到,逗号“,”的添加方式是从最低位每逢三添加一个,这样,我们只需要利用一个计数器,提取一位,+1,当加三的时候,额外添加一个逗号“,”,最后翻转一下即可。

初步代码如下:

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

    cout << "请输入一个整数:" << endl;

    int n;

    cin >> n;

    int count = 0;//计数器,初始化为0

    char a[50];//用数组存储处理过后的数据

    char *p = a;//使用指向数组a的指针

    while(n != 0)

    {

        *p = n % 10 + '0';//注意这里   +‘0’ 是必须的,如果不加‘0’的话,指针的值不会转换成数值1,2,3??????

        n = n / 10;//会自动下取整

        count ++;//取出一位最高位的数后,计数器加一(也相当于现在p中数据的位数)

        p++;//指针p后移一位,以便于写入下一位数

        if(count % 3 == 0 && n!= 0)//注意这里必须添加这个条件,因为如果整数位数恰好是3的倍数的话,会导致逗号多添加                                                       //一个,比如123,当count == 3时,这时候p中会使3,2,1,会在最末尾添加多余的逗                                                            //号“,”,所以,必须添加这个条件。

        {p = ',';

        p++;//指针p后移一位,以便于写入下一位数

        }

    }

    strrev(a);

    cout << a <<endl;

    return 0;

}

猜你喜欢

转载自blog.csdn.net/newandbetter/article/details/80170994
今日推荐