V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kongrui05
V2EX  ›  C

JudgeOnline.cn 在线评判一直提示错误

  •  
  •   kongrui05 · 2015-10-06 06:04:40 +08:00 · 715 次点击
    这是一个创建于 3368 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目如下:给出一个整数 n(1<=n<=20000000),要求输出从 1 到 n 间所有数字中“ 1 ”的出现次数.例如:数字 11 , 1 到 11 间数字“ 1 ”的出现次数为 4 。( 1 , 10 , 11 , 11 出现 4 次,因为 11 有两个 1 ,所以出现 4 次)
    结果都是对的啊,为什么提交后显示 wrong answer 呢?
    我的代码

    #include<stdio.h>
    #include<stdlib.h>
    int pow[8] = {1,10,100,1000,10000,100000,1000000,10000000};
    int f(int n){
        if(n==1)return 1;
        else return 9*sn(n-1)+pow[n-1];
    }
    int sn(int n){
        int i,s=0;
        for(i=0;i<n;i++)s+=f(i+1);
        return s;
    }
    int ra(int n,int *a,int *m){
        int k=10000000,i=8;
        while(n/k==0){
            k/=10,i--;
        }
        *a=n/k;
        *m=i;
        return n-n/k*k;
    }
    int gn(int n){
        int a,m,nn;
        if(n==0)return 0;
        if(n<10)return 1;
        nn=ra(n,&a,&m);
        if(a==1) return gn(nn)+a*sn(m-1)+nn+1;
        else return gn(nn)+a*sn(m-1)+pow[m-1];
    }
    int main(){
        int n;
        scanf("%d",&n);
        printf("%d\n",gn(n));
        return 0;
    }
    
    c742435
        1
    c742435  
       2015-10-06 07:33:23 +08:00 via iPad
    你这个貌似只能处理一个输入?问题应该不止一个输入吧
    hx1997
        2
    hx1997  
       2015-10-06 07:49:32 +08:00 via Android
    @c742435 不是只给出一个整数吗?
    c742435
        3
    c742435  
       2015-10-06 07:55:40 +08:00 via iPad
    你试试改成能处理多个的还 wa 不
    kongrui05
        4
    kongrui05  
    OP
       2015-10-06 14:07:30 +08:00
    @c742435 改过还是 wa
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:51 · PVG 04:51 · LAX 12:51 · JFK 15:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.