hdoj2549 壮志难酬

壮志难酬

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20106    Accepted Submission(s): 6315


 

Problem Description
话说MCA山上各路豪杰均出山抗敌,去年曾在江湖威名显赫的,江湖人称<万军中取上将首级舍我其谁>的甘露也不甘示弱,“天将降大任于斯人也,必先劳其筋骨,饿其体肤,空乏其身”他说。可惜,由于去年取上将首级时不慎右手右关节第七次骨折,养伤达一年之久,空有一腔抱负却壮志难酬,如今天下危亡,习武之人又怎能袖手旁观,于是他决定出山协助威士忌共抗辽贼,这时他的对头枫冰叶子出现,两人都是水属性,但由于十年前的一场恩怨(这是后话)势成水火。

枫冰叶子要求甘露回答一个问题,否则不让他离开,可惜甘露绞尽脑汁未果,希望你来帮他解决,助他完成大业。

问题是这样的:给你一个小数x,让你算出小数点后第n位是什么,(1 <= n <= 6)
 

Input
首先输入一个t,表示有t组数据,跟着t行:
每行输入一个小数(输入数据保证一定是a.b的形式,为了简单化问题,没有循环小数的情况)
然后跟一个n,表示小数点后第几位
 

Output
输出一个数表示小数点后第n位的数
 

Sample Input
 
3
1.234 1
2.345 2
3.456 3
 

Sample Output
 
2
4
6

 这题!!!真的无语啦 卡了我好久 我在网上也没找到说为什么不能用小数来做 我一开始一直用小数一直wa我气死了

先放下我一开始的小数的代码叭

#include<iostream>
#include<cmath>
int main()
{
    using namespace std;
    double s;
    int t,n,k;
    cin>>t;
    while(t--)
    {
        cin>>s>>n;
        for(int i=1;i<=n;i++)
            s*=10;
        k=(int)s%10;
        cout<<k<<endl;
    }
    return 0;
}

但是这样的话 double有可能存不下输入数据 所以要用字符串来做

#include<iostream>
#include<cstring>
int main()
{
    using namespace std;
    int t,n;
    char s[100000];
    cin>>t;
    while(t--)
    {
        getchar();
        cin>>s>>n;
        int count=0;
        for(int i=0;i<strlen(s);i++)
        {
            if(s[i]=='.')
            {
                if(strlen(s)-i-1>=n)
                    cout<<s[i+n]<<endl;
                else
                    cout<<0<<endl;//这个非常重要!!!
                break;
            }
        }
    }
    return 0;
}

这题有个容易被忽视的地方 就是输入的n有可能大于小数位数 所以要分类讨论 当n大于小数位数的时候 要输出0!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值