Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <iostream>
- #include <string>
- #include <sstream>
- using namespace std;
- using std::cout;
- using std::string;
- //using std::basic_stringstream;
- int main(int argc, char **argv)
- {
- FILE *instream;
- int bytes_read=0;
- int buffer_size=0;
- char calculate[100];
- double calculate_double;
- double size;
- double size2;
- double multi;
- double block_size;
- double block_count;
- double repair_number;
- int count=0;
- string str1;
- string str2;
- string str3;
- string str4;
- string str5;
- string str6;
- string str7;
- string str8;
- string str9;
- string stra;
- // char str1[];
- /* open stdin for reading */
- instream=fopen("/dev/stdin","r");
- /* did it open? */
- if(instream!=NULL){
- /* read from stdin until it's end */
- fgets(calculate,100,instream);
- calculate [99] = '\0';
- calculate_double = atof(calculate);
- size = (calculate_double / (1024*1024*1024)); //source size
- size2 = size * 1.03;
- if (size <= 108)
- {
- if (size <= 74)
- multi = 1.1;
- else if (size <= 81 && size > 74)
- multi = 1.1 + ((1.11 - 1.1) * (size - 74) / (81 - 74));
- else if (size <= 88 && size > 81)
- multi = 1.11 + ((1.12 - 1.11) * (size -81) / (88 - 81));
- else if (size <= 105 && size > 88)
- multi = 1.12 + ((1.15 - 1.12) * (size -88) / (105 - 88));
- else if (size <= 108 && size > 105)
- multi = 1.15 + ((1.155 - 1.15) * (size - 105) /(108 - 105));
- block_size = size2 * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- count = 0;
- }
- else if (size <=195 && size > 108)
- {
- if (size <= 114)
- multi = 1.05;
- else if (size <= 119 && size >114)
- multi = 1.05 + ((1.13 - 1.05) * (size - 114) / (119 - 114));
- else if (size <= 139 && size > 119)
- multi = 1.13 + ((1.135 - 1.13) * (size - 119) / (139 - 119));
- else if (size <= 169 && size > 139)
- multi = 1.135 + ((1.14 - 1.135) * (size - 139) / (169 - 139));
- else if (size <= 190 && size > 169)
- multi = 1.14 + ((1.145 - 1.14) * (size -169) / (190 - 169));
- else if (size <= 195 && size > 190)
- multi =1.145 + ((1.149 -1.145 ) * (size - 190) / (195 - 190));
- block_size = (size2 - 99) * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- count = 1;
- }
- else if (size <= 292 && size > 195)
- {
- if (size <= 202 )
- multi = 0.5;
- else if (size <= 211 && size > 202)
- multi = 0.5 + ((0.65 - 0.5) * (size - 202) / (211 - 202));
- else if (size <= 222 && size > 211)
- multi = 0.65 + ((1.03 - 0.65) * (size - 211) / (222 - 211));
- else if (size <= 239 && size > 222)
- multi = 1.03 + ((1.08 - 1.03) * (size - 222) / (239 - 222));
- else if (size <= 256 && size > 239)
- multi = 1.08 + ((1.135 - 1.08) * (size - 239) / (256 -239));
- else if (size <= 292 && size > 256)
- multi = 1.135 + ((1.145 - 1.135) * (size - 256) / (292 - 256));
- block_size = (size2 - 199) * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- count = 2;
- }
- else if (size <= 393 && size > 292)
- {
- if (size <= 310)
- multi = 0.7;
- else if (size <= 324 && size > 310)
- multi = 0.7 + ((0.95 - 0.7) * (size - 310) / (324 - 310));
- else if (size <= 330 && size > 324)
- multi = 0.95 + ((1 - 0.95) * (size - 324) / (330 - 324));
- else if (size <= 348 && size > 330)
- multi = 1 + ((1.04 - 1) * (size -330) / (348 - 330));
- else if (size <= 393 && size > 348)
- multi = 1.04 + ((1.1 - 1.04) * (size - 348) / (364 - 348));
- block_size = (size2 - 299) * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- count = 3;
- }
- else if (size <= 490 && size > 393)
- {
- if (size <= 409)
- multi = 0.6;
- else if (size <= 417 && size > 409)
- multi = 0.6 + ((0.8 - 0.6) * (size - 409) / (417 - 409));
- else if (size <= 490 && size > 417)
- multi = 0.8 + ((1.1 - 0.8) * (size - 417) / (490 - 417));
- block_size = (size2 - 399) * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- count = 4;
- }
- else if (size <= 587 && size > 490)
- {
- if (size <= 517)
- multi = 0.7;
- else if ( size <= 587 && size > 517)
- multi = 0.7 + ((1.1 - 0.7) * (size - 517) / (587 -517));
- block_size = (size2 - 499) * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- count = 5;
- }
- else if (size <= 684 && size > 587)
- {
- if (size <= 628)
- multi = 0.85;
- else if ( size <= 684 && size > 628)
- multi = 0.85 + ((1.1 - 0.85) * (size -628) / ( 684 - 628));
- block_size = (size2 - 599) * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- count = 6;
- }
- else
- {
- multi = 1;
- size2 = size *1.03;
- while(size2 > 100 )
- {
- if(count == 0)
- size2 = size2 - 99;
- else
- size2 = size2 -100;
- count = count + 1;
- }
- block_size = size2 * multi * 5;
- repair_number = block_size * 0.15 / 6; //省去浮點數使用
- repair_number = ceil(repair_number);
- block_count = double (int (repair_number) * 6);
- }
- if(count <= 9)
- {
- int i;
- int j;
- for(i = 0 ;i <= count;i++)
- {
- if( i != count)
- {
- if(i == 0)
- {
- stringstream convert;
- convert << i;
- str1 = "par2 c -b575 -c90 -n15 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.001-099.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
- str2 = convert.str();
- str3 = "*&&";
- str8 = str1 + str2 + str3;
- }
- else
- {
- str1 = "par2 c -b582 -c90 -n15 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
- stringstream convert_i;
- convert_i << i;
- str2 = convert_i.str();
- str3 = "00-";
- // j = i + 1;
- // stringstream convert_j;
- // convert_j << j;
- // str4 = convert_j.str();
- str5 = "99.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
- str6 = "*&&";
- str8 = str8 + str1 + str2 + str3 + str2 +str5 + str2 + str6;
- }
- }
- else if(i == count)
- {
- if(count == 0)
- {
- str1 = "par2 c -b$bc -c$rbc -n$rbn1 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
- str2 = "par2 c -r$rr -s$rbs -n$rbn2 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
- str4 = "*&&cfv -C -tsfv -f$saveWhere$newFileName/$newFileName.sfv $saveWhere$newFileName/*";
- str9 = str8 + str1 + str4;
- }
- else
- {
- stringstream convert;
- convert << count;
- str1 = "par2 c -b$bc -c$rbc -n$rbn1 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
- str2 = "par2 c -r$rr -s$rbs -n$rbn2 -u $saveWhere$newFileName/$newFileName.$rarVersion.rr3.$volume2.par2 $saveWhere$newFileName/$newFileName.$rarVersion.rr3.";
- str3 = convert.str();
- str4 = "*&&cfv -C -tsfv -f$saveWhere$newFileName/$newFileName.sfv $saveWhere$newFileName/*";
- str9 = str8 + str1 + str3 + str4;
- }
- }
- }
- }
- 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);
- cout << str9 << endl;
- fclose(instream);
- }
- /* if any error occured, exit with an error message */
- else{
- fprintf(stderr, "ERROR opening stdin. aborting.\n");
- exit(1);
- }
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement