Advertisement
goddesschi

test7

Oct 11th, 2014
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <iostream>
  5. #include <string>
  6. #include <sstream>
  7.  
  8. using namespace std;
  9. using std::cout;
  10. using std::string;
  11. //using std::basic_stringstream;
  12.  
  13.  
  14. int main(int argc, char **argv)
  15. {
  16.     FILE   *instream;
  17.     int    bytes_read=0;
  18.     int    buffer_size=0;
  19.     char   calculate[100];
  20.     double calculate_double;
  21.     double size;
  22.     double size2;
  23.     double multi;
  24.     double block_size;
  25.     double block_count;
  26.     double repair_number;
  27.     int    count=0;
  28.     string str1;
  29.     string str2;
  30.     string str3;
  31.     string str4;
  32.     string str5;
  33.     string str6;
  34.     string str7;
  35.     string str8;
  36.     string str9;
  37.     string stra;
  38.  
  39. //    char str1[];
  40.  
  41.     /* open stdin for reading */
  42.     instream=fopen("/dev/stdin","r");
  43.  
  44.     /* did it open? */
  45.     if(instream!=NULL){
  46.         /* read from stdin until it's end */
  47.         fgets(calculate,100,instream);
  48.         calculate [99] = '\0';
  49.         calculate_double = atof(calculate);
  50.         size = (calculate_double / (1024*1024*1024));  //source size
  51.         size2 = size * 1.03;
  52.  
  53.         if (size <= 108)
  54.         {
  55.             if (size <= 74)
  56.                 multi = 1.1;
  57.             else if (size <= 81 && size > 74)
  58.                 multi = 1.1 + ((1.11 - 1.1) * (size - 74) / (81 - 74));
  59.             else if (size <= 88 && size > 81)
  60.                 multi = 1.11 + ((1.12 - 1.11) * (size -81) / (88 - 81));
  61.             else if (size <= 105 && size > 88)
  62.                 multi = 1.12 + ((1.15 - 1.12) * (size -88) / (105 - 88));
  63.             else if (size <= 108 && size > 105)
  64.                 multi = 1.15 + ((1.155 - 1.15) * (size - 105) /(108 - 105));
  65.  
  66.             block_size = size2 * multi * 5;
  67.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  68.             repair_number = ceil(repair_number);
  69.             block_count = double (int (repair_number) * 6);
  70.             count = 0;
  71.  
  72.         }
  73.         else if (size <=195 && size > 108)
  74.         {
  75.             if (size <= 114)
  76.                 multi = 1.05;
  77.             else if (size <= 119 && size >114)
  78.                 multi = 1.05 + ((1.13 - 1.05) * (size - 114) / (119 - 114));
  79.             else if (size <= 139 && size > 119)
  80.                 multi = 1.13 + ((1.135 - 1.13) * (size - 119) / (139 - 119));
  81.             else if (size <= 169 && size > 139)
  82.                 multi = 1.135 + ((1.14 - 1.135) * (size - 139) / (169 - 139));
  83.             else if (size <= 190 && size > 169)
  84.                 multi = 1.14 + ((1.145 - 1.14) * (size -169) / (190 - 169));
  85.             else if (size <= 195 && size > 190)
  86.                 multi =1.145 + ((1.149 -1.145 ) * (size - 190) / (195 - 190));
  87.  
  88.             block_size = (size2 - 99) * multi * 5;
  89.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  90.             repair_number = ceil(repair_number);
  91.             block_count = double (int (repair_number) * 6);
  92.             count = 1;
  93.         }
  94.         else if (size <= 292 && size > 195)
  95.         {
  96.             if (size <= 202 )
  97.                 multi = 0.5;
  98.             else if (size <= 211 && size > 202)
  99.                 multi = 0.5 + ((0.65 - 0.5) * (size - 202) / (211 - 202));
  100.             else if (size <= 222 && size > 211)
  101.                 multi = 0.65 + ((1.03 - 0.65) * (size - 211) / (222 - 211));
  102.             else if (size <= 239 && size > 222)
  103.                 multi = 1.03 + ((1.08 - 1.03) * (size - 222) / (239 - 222));
  104.             else if (size <= 256 && size > 239)
  105.                 multi = 1.08 + ((1.135 - 1.08) * (size - 239) / (256 -239));
  106.             else if (size <= 292 && size > 256)
  107.                 multi = 1.135 + ((1.145 - 1.135) * (size - 256) / (292 - 256));
  108.  
  109.             block_size = (size2 - 199) * multi * 5;
  110.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  111.             repair_number = ceil(repair_number);
  112.             block_count = double (int (repair_number) * 6);
  113.             count = 2;
  114.  
  115.         }
  116.         else if (size <= 393 && size > 292)
  117.         {
  118.             if (size <= 310)
  119.                 multi = 0.7;
  120.             else if (size <= 324 && size > 310)
  121.                 multi = 0.7 + ((0.95 - 0.7) * (size - 310) / (324 - 310));
  122.             else if (size <= 330 && size > 324)
  123.                 multi =  0.95 + ((1 - 0.95) * (size - 324) / (330 - 324));
  124.             else if (size <= 348 && size > 330)
  125.                 multi = 1 + ((1.04 - 1) * (size -330) / (348 - 330));
  126.             else if (size <= 393 && size > 348)
  127.                 multi =  1.04 + ((1.1 - 1.04) * (size - 348) / (364 - 348));
  128.  
  129.             block_size = (size2 - 299) * multi * 5;
  130.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  131.             repair_number = ceil(repair_number);
  132.             block_count = double (int (repair_number) * 6);
  133.             count = 3;
  134.  
  135.         }
  136.         else if (size <= 490 && size > 393)
  137.         {
  138.             if (size <= 409)
  139.                 multi = 0.6;
  140.             else if (size <= 417 && size > 409)
  141.                 multi = 0.6 + ((0.8 - 0.6) * (size - 409) / (417 - 409));
  142.             else if (size <=  490 && size > 417)
  143.                 multi = 0.8 + ((1.1 - 0.8) * (size - 417) / (490 - 417));
  144.  
  145.             block_size = (size2 - 399) * multi * 5;
  146.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  147.             repair_number = ceil(repair_number);
  148.             block_count = double (int (repair_number) * 6);
  149.             count = 4;
  150.  
  151.         }
  152.         else if (size <= 587 && size > 490)
  153.         {
  154.             if (size <= 517)
  155.                 multi = 0.7;
  156.             else if ( size <= 587 && size > 517)
  157.                 multi = 0.7 + ((1.1 - 0.7) * (size - 517) / (587 -517));
  158.  
  159.             block_size = (size2 - 499) * multi * 5;
  160.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  161.             repair_number = ceil(repair_number);
  162.             block_count = double (int (repair_number) * 6);
  163.             count = 5;
  164.  
  165.         }
  166.         else if (size <= 684 && size > 587)
  167.         {
  168.             if (size <= 628)
  169.                 multi = 0.85;
  170.             else if ( size <= 684 && size > 628)
  171.                 multi = 0.85 + ((1.1 - 0.85) * (size -628) / ( 684 - 628));
  172.  
  173.             block_size = (size2 - 599) * multi * 5;
  174.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  175.             repair_number = ceil(repair_number);
  176.             block_count = double (int (repair_number) * 6);
  177.             count = 6;
  178.         }
  179.         else
  180.         {
  181.             multi = 1;
  182.             size2 = size *1.03;
  183.  
  184.             while(size2 > 100 )
  185.             {
  186.                 if(count == 0)
  187.                     size2 = size2 - 99;
  188.                 else
  189.                     size2 = size2 -100;
  190.                 count = count + 1;
  191.             }
  192.  
  193.             block_size = size2 * multi * 5;
  194.             repair_number = block_size * 0.15 / 6; //省去浮點數使用
  195.             repair_number = ceil(repair_number);
  196.             block_count = double (int (repair_number) * 6);
  197.         }
  198.  
  199.         if(count <= 9)
  200.         {
  201.             int i;
  202.             int j;
  203.             for(i = 0 ;i <= count;i++)
  204.             {
  205.                 if( i != count)
  206.                 {
  207.                     if(i == 0)
  208.                     {
  209.                         stringstream convert;
  210.                         convert << i;
  211.                         str1 = "par2 c -b575 -c90 -n15 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.001-099.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
  212.                         str2 = convert.str();
  213.                         str3 = "*&&";
  214.                         str8 = str1 + str2 + str3;
  215.                     }
  216.                     else
  217.                     {
  218.                         str1 = "par2 c -b582 -c90 -n15 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
  219.                         stringstream convert_i;
  220.                         convert_i << i;
  221.                         str2 = convert_i.str();
  222.                         str3 = "00-";
  223.                     //    j = i + 1;
  224.                     //    stringstream convert_j;
  225.                     //    convert_j << j;
  226.                     //    str4 = convert_j.str();
  227.                         str5 = "99.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
  228.                         str6 = "*&&";
  229.                         str8 = str8 + str1 + str2 + str3 + str2 +str5 + str2 + str6;
  230.                     }
  231.  
  232.                 }
  233.                 else if(i == count)
  234.                 {
  235.                     if(count == 0)
  236.                     {
  237.                         str1 = "par2 c -b$bc -c$rbc -n$rbn1 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
  238.                         str2 = "par2 c -r$rr -s$rbs -n$rbn2 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
  239.                         str4 = "*&&cfv -C -tsfv -f$saveWhere$newFileName/$newFileName.sfv $saveWhere$newFileName/*";
  240.                         str9 = str8 + str1 + str4;
  241.                     }
  242.                     else
  243.                     {
  244.                         stringstream convert;
  245.                         convert << count;
  246.                         str1 = "par2 c -b$bc -c$rbc -n$rbn1 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
  247.                         str2 = "par2 c -r$rr -s$rbs -n$rbn2 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
  248.                         str3 = convert.str();
  249.                         str4 = "*&&cfv -C -tsfv -f$saveWhere$newFileName/$newFileName.sfv $saveWhere$newFileName/*";
  250.                         str9 = str8 + str1 + str3 + str4;
  251.                     }
  252.                 }
  253.             }
  254.         }
  255.  
  256.         printf("02.size(bit)               %.0f\n03.size(source)(gb)        %.3f\n04.size(source*1.03)(gb)   %.3f\n05.multi                   %.2f\n06.block_count(bc)         %.0f\n07.Recovery_count(rbc)     %.0f\n08.repire_number(rbn1)     %.0f\n09.count1                  %d\n",calculate_double,size,size2,multi,block_size,block_count,repair_number,count);
  257.         cout << str9 << endl;
  258.         fclose(instream);
  259.  
  260.     }
  261.     /* if any error occured, exit with an error message */
  262.     else{
  263.         fprintf(stderr, "ERROR opening stdin. aborting.\n");
  264.         exit(1);
  265.     }
  266.  
  267.     return(0);
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement