fork(3) download
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4.  
  5. long long gcd(long long u, long long v)
  6. {
  7. long long temp;
  8. while(v)
  9. {
  10. temp=v;
  11. v=u%v;
  12. u=temp;
  13. }
  14. return temp;
  15. }
  16. long long find_dignums_in_num_between_1_n(char n[],int x)
  17. {
  18.  
  19. int len=strlen(n);
  20. long long ninpo=1,sum=0;
  21. for(int i=1;i<len;i++)
  22. {
  23. ninpo*=9;
  24. }
  25. if(x==0)
  26. {sum+=9*((ninpo-1)/8);}
  27. int flag=0;
  28. int temp=0;
  29. for(int i=0;i<len && flag!=1;i++,ninpo/=9)
  30. {
  31. temp=n[i]-'0';
  32. if(x>=1)
  33. {
  34. if(temp<x)
  35. sum+=(n[i]-'0')*ninpo;
  36.  
  37. else if(temp==x)
  38. {
  39. sum+=(n[i]-'0')*ninpo-1;
  40. flag=1;
  41. }
  42. else if(temp>x)
  43. {
  44. sum+=(n[i]-'1')*ninpo;
  45. }
  46. }
  47. else if(x==0)
  48. {
  49. if(temp>x)
  50. {
  51. if(i!=len-1)
  52. sum+=(temp-1)*ninpo;
  53. else sum+=temp*ninpo;
  54. }
  55.  
  56. else flag=1;
  57. }
  58. }
  59. temp=atol(n);
  60. return (temp-sum);
  61.  
  62. }
  63.  
  64. int main()
  65. {
  66. char n[40]={0};
  67. long long a,ans,num,t;
  68. scanf("%lld",&t);
  69. long long temp=0;
  70. while(t--)
  71. {
  72. scanf("%lld",&num);
  73. memset(n,0,sizeof(char)*40);
  74. sprintf(n,"%lld",num);
  75. a=0;
  76. for(int i=0;i<10;i++)
  77. {
  78. if(i<=num)
  79. a+=find_dignums_in_num_between_1_n(n,i);
  80. }
  81. num=10*num;
  82. temp=gcd(a,num);
  83. printf("%lld/%lld\n",a/temp,num/temp);
  84. }
  85. return 0;
  86. }
  87.  
  88.  
Success #stdin #stdout 0s 3300KB
stdin
5
1603
9
11
10190
100
stdout
2332/8015
1/10
6/55
1712/5095
91/500