Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int ISBN13(char* c);
  4.  
  5. int main(void)
  6. {
  7. char number[10000];
  8. char *pointer=number;
  9.  
  10. printf("Please insert International Standard Book Number\n");
  11. pointer = fgets(number,10000,stdin); //Overflow zbog prevelikog broja znakova je tu nemoguće izbjeći jer se ne smije koristiti dinamička alokacija memorije
  12. printf("%d",ISBN13(pointer));
  13. return 0;
  14. }
  15.  
  16. int ISBN13(char* number){
  17. char* temp =number;
  18. int length=0, digitsNumber=0, hyphensNumber=0;
  19. int prefixSize=0, regGroupSize=0, regElSize=0, pubElSize=0, checkDigitSize=0;
  20. char prefix[10000],regGroup[10000],regEl[10000],pubEl[10000],checkDigit[10000];
  21. for(;*temp!='\0' && *temp!=10 ;temp++){
  22. length++;
  23. if(*temp==45){
  24. hyphensNumber++;
  25. }
  26. else if(*temp>=48 && *temp<=57){
  27. digitsNumber++;
  28.  
  29. if(hyphensNumber<1){
  30. prefix[prefixSize]=*temp;
  31. prefix[++prefixSize]='\0';
  32. }
  33. if(hyphensNumber==1){
  34. regGroup[regGroupSize]=*temp;
  35. regGroup[++regGroupSize]='\0';
  36. }
  37. if(hyphensNumber==2){
  38. regEl[regElSize]=*temp;
  39. regEl[++regElSize]='\0';
  40. }
  41. if(hyphensNumber==3){
  42. pubEl[pubElSize]=*temp;
  43. pubEl[++pubElSize]='\0';
  44. }
  45. if(hyphensNumber==4){
  46. checkDigit[checkDigitSize]=*temp;
  47. checkDigit[++checkDigitSize]='\0';
  48. }
  49. }
  50. else{
  51. return -1;
  52. }
  53.  
  54. }
  55.  
  56. if(digitsNumber!=13){
  57. return -2;
  58. }
  59. if(hyphensNumber!=4){
  60. return -3;
  61. }
  62. if(prefixSize!=3){
  63. return -4;
  64. }
  65. else{
  66. if(prefix[0]!='9' || prefix[1]!='7' || (prefix[2]!='8' && prefix[2]!='9')){
  67. return -4;
  68. }
  69. }
  70. if(regGroupSize<1 || regGroupSize>5){
  71. return -5;
  72. }
  73. if(regElSize>7){
  74. return -6;
  75. }
  76. if(pubElSize>6){
  77. return -7;
  78. }
  79. if((regGroupSize+regElSize+pubElSize)!=9){
  80. return -8;
  81. }
  82. if(checkDigitSize!=1){
  83. return -9;
  84. }
  85. else{
  86. int sum = 0;
  87. int multiplier=1;
  88. for(int i=0;i<prefixSize;i++){
  89. sum = sum +(prefix[i]-48)*multiplier;
  90. if(multiplier==1){
  91. multiplier=3;
  92. }
  93. else{
  94. multiplier=1;
  95. }
  96. }
  97. for(int i=0;i<regGroupSize;i++){
  98. sum = sum +(regGroup[i]-48)*multiplier;
  99. if(multiplier==1){
  100. multiplier=3;
  101. }
  102. else{
  103. multiplier=1;
  104. }
  105. }
  106. for(int i=0;i<regElSize;i++){
  107. sum = sum +(regEl[i]-48)*multiplier;
  108. if(multiplier==1){
  109. multiplier=3;
  110. }
  111. else{
  112. multiplier=1;
  113. }
  114. }
  115. for(int i=0;i<pubElSize;i++){
  116. sum = sum +(pubEl[i]-48)*multiplier;
  117. if(multiplier==1){
  118. multiplier=3;
  119. }
  120. else{
  121. multiplier=1;
  122. }
  123. }
  124. int mod = sum % 10;
  125. int digit = 10-mod;
  126. if(digit!= checkDigit[0]-48){
  127. return -9;
  128. }
  129. }
  130. return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement