Sum Squared Digits Function

The Sum Squared Digits function, SSD(b, n)SSD(b, n) of a positive integer n, in base bb is defined by representing nn in base b as in: 

n = a0 + a1*b + a2*b^2 +........

then:

SSD(b, n) = a0^2 + a1^2 + a2^2 +........

is the sum of squares of the digits of the representation.  

Write a program to compute the Sum Squared Digits function of an input positive number.

Input Format

The first line of input contains a single decimal integer P(1 \le P \le 10000)P(1≤P≤10000), which is the number of data sets that follow. Each data set should be processed identically and independently.

Each data set consists of a single line of input. It contains the data set number, KK, followed by the base, b (3 \le b \le 16)b(3≤b≤16) as a decimal integer, followed by the positive integer, nn (as a decimal integer) for which the Sum Squared Digits function is to be computed with respect to the base bb. nn will fit in a 3232 bit unsigned integer.

Output Format

For each data set there is a single line of output.  The single line of output consists of the data set number, KK, followed by a single space followed by the value of SSD(b,\ n)SSD(b, n) as a decimal integer.

样例输入  

3

1 10 1234

2 3 98765

3 16 987654321

样例输出  

1 30

2 19

3 696

本题大概意思就是根据上面两个公式,给出两个参数算出SSD(b,n)的值

其实就是求n可以除尽的b的各次方的除数的和。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >> n;
    while(n --){
        int m,b,i = 0, ans = 0;
        unsigned k;
        cin >> m >> b >> k;
        while(pow(b,i) <= k){
            i++;
        }
        for(; i >=0; i--){
            ans += int(k/pow(b,i))*int(k/pow(b,i));
            k = k % int(pow(b,i));
        }
        cout << m << " " << ans << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/WZSRLGLLLL/article/details/81387822