代码改变世界

求一个数任意位的值及位数

2013-09-01 21:11  youxin  阅读(3377)  评论(0编辑  收藏  举报

如:a=12345

求各位的值分别是多少;

0(个位): a%10       =5              (只要mod10就是取一个数的个位,但是mod100不是取10位,而是取十位和个位,同理类推

10(十位):(a/10)=1234,再1234%10=4;

100(百位)a/100=123;再mod10

 

得出规律:

只要把a除以pow(10,i);然后在mod10即可求出第i位的值。

#include<iostream>
#include<cmath>
using namespace std;
//求总位数
int getNumOfDigits(int a)
{
    int count=0;
    while(a)
    {
        a/=10;
        count++;
    }
    return count;
}
//求第k位的值
int divide(int a,int k)//k为要取的位,从0位开始
{
    if(k!=0)//k为0时,a没有变化,这句不要也可以
        a=a/ pow((double)10,k); //注意在math文件中,没有pow(int,int)这这种重载形式,所以要加double或float)

    return a%10;
}

//求各个位的值之和
int getDigitsSum(int a)
{
    if(a<10)
        return a;
    else
        return getDigitsSum(a/10)+a%10;
}
int main()
{
    int n;
    while(cin>>n)
    {
        int count=getNumOfDigits(n);
        cout<<"位数为"<<count<<endl;
        for(int i=0;i<count;i++)
        {
            cout<<divide(n,i)<<ends;
        }
        cout<<endl;
        cout<< getDigitsSum(n)<<endl;
    }
}