HDU 4485 B-Casting (基础题)

B-Casting

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 607    Accepted Submission(s): 303



Problem Description
Casting around for problems leads us to combine modular arithmetic with different integer bases, particularly the problem of computing values modulo b-1, where b is the base in which the value is represented. For example,

7829 10 mod 9 = 8,
37777777777777773 8 mod 7 = 6
123456 7 mod 6 = 3

(Note that 37777777777777773 8 = 1125899906842619 10 and 123456 7 = 22875 10.)

Your job is to write a program that reads integer values in various bases and computes the remainder after dividing these values by one less than the input base.
 

Input
The first line of input contains a single integer P, (1 <= P <= 1000) , which is the number o data sets that follow. Each data set should be processed identically and independently.

Each data set consists of a single line of input containing three space-separated values. The first is an integer which is the data set number. The second is an integer which is the number, B (2 <= B <= 10), denoting a numeric base. The third is an unsigned number, D, in base B representation. For this problem, the number of numeric characters in D will be limited to 10,000,000.
 

Output
For each data set there is a single line of output. It contains the data set number followed by a single space which is then followed by the remainder resulting from dividing D by (B-1).
 

Sample Input
  
  
4 1 10 7829 2 7 123456 3 6 432504023545112 4 8 37777777777777773
 

Sample Output
  
  
1 8 2 3 3 1 4 6
 

Source
 

Recommend
liuyiding
 

题意:
某一个很大的数,是由2到10的进制表示的,要将这个数取模,模数为该数进制减1。
思路:
1.首先明确这个很大的数字要由__int64或longlong实现也是很困难的,所以需要用字符串来记录数字。
2.既然这个数不是以10进制表示,就不难想到要将它换成10进制数后再取模。
3.其他进制的数转换成10进制数是需要从个位开始逐位乘以该位的进制的次方数,如二进制数 110 = 0 * 2^0 + 1 * 2^1 +1 * 2^2 = 6
4.有了以上想法,就容易想到边求和变取模的思路

/*************************************************************************
	> File Name: B.cpp
	> Author: BSlin
	> Mail:  
	> Created Time: 2013年10月06日 星期日 13时08分04秒
 ************************************************************************/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#define MP make_pair
#define INF (1<<30)
#define PI acos(-1.0)
#define esp 1e-8
const int dx[4]={0,0,0,0};
using namespace std;
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
#if defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
#define LL __int64
#define LLS "%" "I" "6" "4" "d"
#else
#define LL long long
#define LLS "%" "l" "l" "d"
#endif



#define M 10000010

char str[M];

int main(int argc, char** argv) {
    //read;
    int t,num,B,Bnum,len,ans,MOD;
    scanf("%d",&t);
    while(t--) {
        scanf("%d %d %s",&num,&B,str);
        //printf("%d %d %s\n",num,B,str);
        len = strlen(str);
        Bnum = 1;
        MOD = B - 1;
        ans = (str[len-1] - '0') % MOD;
        for(int i=len-2; i>=0; i--) {
            Bnum = Bnum * B % MOD;
            ans = ((ans + (str[i] - '0') * Bnum % MOD) % MOD + MOD) % MOD;
        }
        printf("%d %d\n",num,ans);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用 JavaScript 编写的杀死幽灵游戏(附源代码) 杀死鬼魂游戏是使用 Vanilla JavaScript、CSS 和 HTML 画布开发的简单项目。这款游戏很有趣。玩家必须触摸/杀死游荡的鬼魂才能得分。您必须将鼠标悬停在鬼魂上 - 尽量得分。鬼魂在眨眼间不断从一个地方移动到另一个地方。您必须在 1 分钟内尽可能多地杀死鬼魂。 游戏制作 这个游戏项目只是用 HTML 画布、CSS 和 JavaScript 编写的。说到这个游戏的特点,用户必须触摸/杀死游荡的幽灵才能得分。游戏会根据你杀死的幽灵数量来记录你的总分。你必须将鼠标悬停在幽灵上——尽量得分。你必须在 1 分钟内尽可能多地杀死幽灵。游戏还会显示最高排名分数,如果你成功击败它,该分数会在游戏结束屏幕上更新。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值