fork download
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<limits.h>
  4. int lv = 1;
  5. int i = 1;
  6. int retNum = 0;
  7.  
  8.  
  9. //桁数lvの整数mの、10^(n-1)の位の数を求める関数
  10. int Jrank(long int m,int n,int lv){
  11. long int Numb = m;
  12. long int temp[lv-n+1];
  13. for(int i=0;i<lv-n;i++){
  14. temp[i]=0;
  15. }
  16.  
  17. temp[0] =m;
  18. for(int i=1;i <= (lv-n);i++){
  19. temp[i]=Jrank(m,lv-i+1,lv)*pow(10,lv-i);
  20. Numb = Numb - temp[i];
  21. }
  22. return floor( Numb/pow(10,n-1) );
  23. }
  24. ////////////////////////////////////////////////
  25.  
  26.  
  27. int g(long int n){
  28.  
  29.  
  30. //桁数を調べる////////////////////////////////
  31. int i = 1;
  32. int lv=1;
  33. while(1){
  34. if( (n / pow(10,i))<1){
  35. lv = i;
  36. break;
  37. }
  38. else{
  39. i++;
  40. }
  41. }
  42. int revNum[lv];
  43. int Num[lv];
  44. for(int i=0;i<lv;i++){
  45. revNum[i]=0;
  46. Num[i]=0;
  47. }
  48. //////////////////////////////////////////////
  49. for(int i=0;i<lv;i++){
  50. Num[i]=Jrank(n,lv-i,lv);
  51.  
  52. }///ex)n=3456の時、Num[0]=3,Num[1]=4,Num[2]=5,Num[3]=6
  53.  
  54.  
  55. for(int i=0;i<lv;i++){
  56. revNum[i]=Num[lv-i-1];
  57. }
  58.  
  59. for(int i=0;i<lv;i++){
  60. retNum = retNum + revNum[i]*pow(10,lv-i-1);
  61. }
  62.  
  63.  
  64.  
  65.  
  66.  
  67. return retNum;
  68. }
  69.  
  70. int main(){
  71. int n;
  72. n=g(12345000);
  73.  
  74. printf("%d",n);
  75.  
  76. return 0;
  77. }
Success #stdin #stdout 0s 2160KB
stdin
Standard input is empty
stdout
54321