如: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; } }