gpt4 book ai didi

c - 我对 C 中的数组有疑问(Hackerearth - 查找产品)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:54 25 4
gpt4 key购买 nike

给定一个大小为 N 的数组 A,其中包含正整数。您需要查找并打印此数组 Modulo 中所有数字的乘积。

问题链接 - https://www.hackerearth.com/practice/basic-programming/input-output/basics-of-input-output/practice-problems/algorithm/find-product/description/

样本输入

5
1 2 3 4 5

样本输出

120

我试过使用:

int main()
{
long num,p=1;
scanf("%d", &num);
long arr[num];

for(long i=0;i<num;i++)
{
scanf("%d",&arr[i]);
p=p*arr[i];
}
printf("%d",p);
}

输入测试用例 1:

1000





290 112 217 950 559 866 239 367 549 141 323 967 927 267 917 681 348 478 868
325 332 391 445 738 809 573 792 662 942 877 727 131 86 723 397 657 507 511
369 921 459 960 870 657 399 973 856 586 674 679 104 133 836 851 716 534 245
29 613 880 119 737 640 62 888 967 969 361 51 937 3 813 912 480 624 694 900
926 255 726 499 435 514 297 752 805 340 230 543 735 517 954 913 104 972 958
843 695 50 379 540 500 171 370 658 737 376 540 639 233 215 920 925 659 243
158 920 741 362 191 606 8 945 142 360 138 695 648 103 20 514 148 999 1 591
136 454 100 561 272 697 452 426 841 538 298 71 614 941 553 352 278 120 769
721 948 286 4 450 801 212 463 854 586 881 227 276 130 412 987 962 82 248 195
835 398 350 766 59 16 868 108 50 649 633 436 939 829 186 763 675 804 728 194
276 615 332 985 464 472 350 72 631 616 771 115 644 389 929 886 946 571 860
214 114 741 443 318 6 696 917 725 741 725 838 600 645 540 800 240 55 110 600
208 388 53 612 464 996 474 854 828 618 915 590 755 751 832 964 877 191 448
89 57 224 837 970 918 81 595 869 398 353 869 617 934 991 742 773 65 506 274
243 476 710 975 723 486 746 130 135 139 714 2 119 229 929 953 531 295 284
876 577 269 849 175 798 516 178 230 924 610 154 599 635 639 253 928 68 336
674 993 791 535 621 788 250 61 643 448 734 855 751 368 36 244 516 758 564
768 853 698 30 899 530 634 186 996 261 364 437 341 143 175 906 638 341 187
123 101 824 209 870 668 457 860 334 271 947 246 81 368 662 507 562 469 430
977 779 974 375 693 249 37 250 345 29 987 114 34 378 886 561 538 497 959 863
820 426 141 201 205 618 89 216 191 827 853 668 139 947 762 437 878 65 145
390 175 525 395 164 177 784 406 455 739 657 658 927 807 89 394 276 48 587 58
15 371 807 276 878 716 555 723 8 117 300 707 384 740 998 940 814 38 461 188
247 650 606 227 256 192 623 799 729 117 394 323 380 179 260 410 380 58 316
95 443 585 893 736 961 957 71 607 304 797 535 410 537 503 498 465 690 686
830 843 301 365 92 599 74 849 149 336 938 789 778 210 484 807 672 764 966
651 473 459 885 556 56 815 983 187 234 761 669 534 928 662 41 301 761 818
596 308 558 985 429 800 810 712 952 270 675 752 373 863 962 489 560 764 673
203 674 322 774 830 925 156 955 169 851 614 611 511 38 232 99 430 772 767
193 372 865 122 830 417 21 87 140 5 857 30 646 407 500 965 914 149 553 923
567 916 400 817 359 203 43 749 308 111 27 612 410 585 911 641 910 254 535 66
522 19 463 860 766 173 662 593 984 309 775 76 97 732 98 97 550 76 723 498 30
48 542 459 273 596 136 107 47 28 849 157 928 191 669 91 203 859 864 655 665
767 276 116 142 279 927 863 693 911 709 842 305 380 756 965 728 716 182 286
269 645 392 681 813 292 250 177 817 728 288 874 309 185 71 209 842 612 834
25 565 828 794 484 568 762 572 652 600 875 781 410 844 197 704 145 245 751
469 650 301 772 915 835 363 513 340 384 295 703 486 78 847 577 347 971 645
39 17 834 341 77 785 91 976 21 819 317 286 253 460 107 364 261 948 57 670
529 277 96 237 737 66 529 866 570 328 377 346 863 174 556 793 245 997 205 43
360 111 546 692 652 617 454 242 337 31 832 887 494 83 526 694 848 226 818
502 186 645 273 560 44 716 348 339 911 868 726 37 249 383 212 125 562 43 62
811 955 290 538 929 791 716 948 587 14 79 717 715 170 866 789 358 786 446
339 488 197 787 417 836 590 6 198 813 497 98 392 926 980 344 325 717 369 985
179 151 960 706 707 217 236 74 781 825 245 224 584 337 991 827 868 326 695
984 642 664 756 147 374 609 839 379 315 781 713 653 474 727 61 289 474 636
835 613 202 948 631 810 577 936 363 562 44 919 779 290 869 360 707 609 479
18 368 276 302 88 459 686 922 43 275 252 962 346 115 99 866 560 829 131 479
31 376 477 995 962 895 610 670 581 78 93 881 636 490 746 265 379 853 569 170
627 429 395 440 631 993 11 142 602 944 817 471 281 869 565 251 439 90 95 280
363 856 240 774 665 954 284 813 730 982 560 951 630 725 704 700 398 239 844
770 512 410 61 316 211 429 429 613 930 447 474 171 319 19 359 345 978 642
948 177 202 534 18 160 648 698 369 925

输出:

115327841

这是我在 C 中的代码:

#include <stdio.h>

int main()
{
long num,p=1;
scanf("%d", &num);
long arr[1000];

for(long i=0;i<num;i++)
{
scanf("%d",&arr[i]);
p=p*arr[i];
}

printf("%d",p);
}

最佳答案

您未能正确重现 problem statement :

You have been given an array A of size N consisting of positive integers. You need to find and print the product of all the numbers in this array modulo 109+7.

以下是简单迭代解决方案的步骤(如练习页中所述):

  • 读取迭代次数
  • 从产品的当前值 1 开始
  • 重复以下步骤:
    • 读下一个数字
    • 乘以这个数
    • 对乘积求模 1000000007
  • 打印产品。

为了使上述步骤产生正确的结果,您必须使用可以处理大至 (109+7-1)2 的值的类型,这略高于 1018 且低于 260。 64 位整数足以处理这些值,但 32 位整数则不行。 long long 类型由 C 标准强制要求至少有 63 个值位,因此适用于计算。

像您在程序中所做的那样计算所有值的乘积是不正确的,因为您几乎会立即得到一个整数溢出,它具有未定义的行为并且充其量会导致隐式模 232 运算,它给出与所需的模 1000000007 运算不同的值。

下面是这种类型的实现:

#include <stdio.h>

int main() {
int n;
long long product, value;

if (scanf("%d", &n) != 1 || n < 0) {
printf("invalid input\n");
return 1;
}
product = 1;
while (n--) {
if (scanf("%lld", &value) != 1) {
printf("invalid input\n");
return 1;
}
product = product * value % 1000000007;
}
printf("%lld\n", product);
return 0;
}

关于c - 我对 C 中的数组有疑问(Hackerearth - 查找产品),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57839243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com