3055:不一样的权值相加

题目描述
对给定的一个正整数,按如下规则进行累加得到一个数

比如123

则11+22+3*3=14

又比如2468

21+42+63+84=60

即该数第一位数1+该数第二位数2+该数第三位数*3.....

依次类推

输入
一个正整数N<100000
输出
按题目的规则,输出一个权值累加和
样例输入
2468
样例输出
60

#include <iostream>
using namespace std;
int main()
{
    int a[20];
    int n,i = 0;
    int sum = 0;
    cin >> n;
    while(n)
    {
        a[i] = n%10;
        i++;
        n/=10;
    }
    for (int j = i;j>0;j--)
    {
        sum += a[j-1] * (i-j+1);
    }
    cout << sum ;
    return 0;
}




#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    int i,n,m,k,num=0,val=0;
    cin>>n;
    m=n;
    while(m>0)
    {
        num++;
        m=m/10;
    }
    k=pow(10.0,num-1);
    for(i=1;i<=num;i++)
    {
        val += n/k*i;
        n=n%k;
        k/=10;
    }
    cout<<val<<endl;
    return 0;
}

先把int型按10进制转字符串
然后循环取出里面的每一个字符
重新转成int
然后sum+=n*(i+1)