HDU 4432 Sum of divisors (水题,进制转换)

题意:给定 n,m,把 n 的所有因数转 m 进制,再把各都平方,求和。

析:按它的要求做就好,注意的是,是因数,不可能有重复的。。。比如4的因数只有一个2,还有就是输出10进制以上的,要用AB。。

但我用的是ab。。又没读好题。。。。活该WA了好几次。

代码如下:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <cctype>
#include <stack>
using namespace std ;

typedef long long LL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const double inf = 0x3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int maxn = 10 + 5;
const int mod = 1e9 + 7;
const char *mark = "+-*";
const int dr[] = {-1, 0, 1, 0};
const int dc[] = {0, 1, 0, -1};
int n, m;
inline bool is_in(int r, int c){
    return r >= 0 && r < n && c >= 0 && c < m;
}

int a[70];

int solve(int x){
    int ans = 0;
    while(x){
        ans += (x % m) * (x % m);
        x /= m;
    }
    return ans;
}

int main(){
    while(scanf("%d %d", &n, &m) == 2){
        int t = sqrt(n+0.5);
        int ans = 0;
        for(int i = 1; i <= t; ++i){
            if(n % i == 0){
                ans += solve(i);
                if(n / i != i)  ans += solve(n/i);
            }
        }
        int cnt = 0;
        while(ans){
            a[cnt++] = ans % m;
            ans /= m;
        }
        for(int i = cnt-1; i >= 0; --i)
            if(a[i] < 10)  printf("%d", a[i]);
            else printf("%c", ‘A‘+a[i]-10);
        printf("\n");
    }
    return 0;
}
时间: 2024-10-25 06:03:41

HDU 4432 Sum of divisors (水题,进制转换)的相关文章

POJ1546 &amp; HDU 1335 &amp; ZOJ 1334 Basically Speaking(进制转换)

题目链接: POJ:http://poj.org/problem?id=1546 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1335 ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=334 Description The Really Neato Calculator Company, Inc. has recently hired your team to help

[编程题-华为]进制转换

[编程题] 进制转换 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串. 输出描述: 输出该数值的十进制字符串. 输入例子: 0xA 输出例子: 10 #include<iostream> #include<string> using namespace std; int toDigit(char c) { if(c>='a' && c<='f') return c-'a'

hdu 1999 不可摸数 水题。

不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7966    Accepted Submission(s): 2024 Problem Description s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数. Input 包

HDU Senior&#39;s Gun (水题)

题意:给n把枪,m个怪兽,每把枪可消灭1怪兽,并获得能量=枪的攻击力-怪兽的防御力.求如何射杀能获得最多能量?(不必杀光) 思路:用最大攻击力的枪杀防御力最小的怪兽明显可获得最大能量.如果每把枪都去射杀刚好1点能量都拿不到的怪物,那简直等于把枪全丢掉. 1 //#pragma comment(linker,"/STACK:102400000,102400000") 2 #include <iostream> 3 #include <stdio.h> 4 #inc

HDU 5590 ZYB&#39;s Biology 水题

ZYB's Biology Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5590 Description ZYB(ZJ−267)在NOIP拿到600分之后开始虐生物题,他现在扔给你一道简单的生物题:给出一个DNA序列和一个RNA序列,问它们是否配对. DNA序列是仅由A,C,G,T组成的字符串,RNA序列是仅由A,C,G,U组成的字符串. DNA和RNA匹配当且仅当每

枚举 + 进制转换 --- hdu 4937 Lucky Number

Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 294    Accepted Submission(s): 49 Problem Description “Ladies and Gentlemen, It’s show time! ” “A thief is a creative artist who ta

hdu 4937 Lucky Number(数学题 进制转换)2014多校训练第7场

Lucky Number                                                                          Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description "Ladies and Gentlemen, It's show time! " "A thie

hdu 4937 Lucky Number ( 进制转换+枚举 )

题意: 有一个数n,问有多少个进制x(基数)使得n转换为x进制后的数字中只有3.4.5.6四个数. 算法: 对于只有一位数的情况,显然3.4.5.6都应该输出-1. 如果有2位数,假设这2位中高位为a,低位为b,进制为base,则 n = a * base + b,解一元一次方程即可. 如果有3位数,假设这3为从高到低分别为a.b.c,进制为base,则 n = a * base * base + b * base + c,即一元二次方程即可. 如果位数>= 4,可以暴力枚举进制数.base>

hdu 2031 进制转换

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2031 题目大意:进制转换,先变成十进制在进行进制间的转化. 1 #include<stdio.h> 2 int main() 3 { 4 int n,m,i,j,f,p; 5 char a[200]; 6 while(scanf("%d%d",&n,&m)!=EOF) 7 { 8 i=0; 9 p=0; 10 if(n<0) 11 { 12 p=-1; 1