fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4.  
  5. unsigned int myConcat(unsigned int a, unsigned int b) {
  6. switch( (b >= 10000000) ? 7 :
  7. (b >= 1000000) ? 6 :
  8. (b >= 100000) ? 5 :
  9. (b >= 10000) ? 4 :
  10. (b >= 1000) ? 3 :
  11. (b >= 100) ? 2 :
  12. (b >= 10) ? 1 : 0 ) {
  13. case 1: return a*100+b; break;
  14. case 2: return a*1000+b; break;
  15. case 3: return a*10000+b; break;
  16. case 4: return a*100000+b; break;
  17. case 5: return a*1000000+b; break;
  18. case 6: return a*10000000+b; break;
  19. case 7: return a*100000000+b; break;
  20. default: return a*10+b; break;
  21. // I don't really know what to do here
  22. //case 8: return a*1000*1000*1000+b; break;
  23. //case 9: return a*10*1000*1000*1000+b; break;
  24. }
  25. }
  26.  
  27. unsigned int uintcat (unsigned int ms, unsigned int ls) {
  28. unsigned int mult;
  29. for(mult=10; mult <= ls; mult *= 10) {}
  30. return ms * mult + ls;
  31. }
  32.  
  33. #define testCnt 10*1000*1000
  34. int ma[testCnt], mb[testCnt];
  35. int mc[testCnt], md[testCnt];
  36.  
  37. int main() {
  38. srand(time(0));
  39.  
  40. int i;
  41. for(i = 0; i < testCnt; i++)
  42. ma[i] = rand()%10, mb[i] = (int)(rand()/(double)RAND_MAX*100*1000*1000), mc[i] = ma[i], md[i] = mb[i];
  43.  
  44. time_t start_time;
  45. start_time = clock();
  46. for(i = 0; i < testCnt; ++i)
  47. myConcat(ma[i], mb[i]);
  48. printf("%.3lf\n",(clock()-start_time)/(double)CLOCKS_PER_SEC);
  49.  
  50. start_time = clock();
  51. for(i = 0; i < testCnt; ++i)
  52. uintcat(mc[i], md[i]);
  53. printf("%.3lf\n",(clock()-start_time)/(double)CLOCKS_PER_SEC);
  54.  
  55. return 0;
  56. }
Success #stdin #stdout 1.12s 158528KB
stdin
Standard input is empty
stdout
0.000
0.100