Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลรวมของตัวเลขแบบเรียกซ้ำใน n^x โดยที่ n และ x มีขนาดใหญ่มากใน C++


เราได้รับตัวแปรจำนวนเต็มบวกเป็น 'num' และ 'x' ภารกิจคือการคำนวณซ้ำ num ^ x จากนั้นเพิ่มตัวเลขของตัวเลขผลลัพธ์จนกระทั่งหลักเดียวไม่สำเร็จและผลลัพธ์หลักเดียวจะเป็นผลลัพธ์

ให้เราดูสถานการณ์อินพุตเอาต์พุตที่หลากหลายสำหรับสิ่งนี้ -

ป้อนข้อมูล − int num =2345, int x =3

ผลผลิต − ผลรวมของตัวเลขแบบเรียกซ้ำใน n^x โดยที่ n และ x มีขนาดใหญ่มากคือ:8

คำอธิบาย − เราได้รับค่าจำนวนเต็มบวกเป็น num และ x โดยมีค่าเป็น 2345 และกำลังเป็น 3 ขั้นแรก ให้คำนวณ 2345 ^ 3 เช่น 12,895,213,625 ตอนนี้เราจะบวกตัวเลขเหล่านี้เช่น 1 + 2 + 8 + 9 + 5 + 2 + 1 + 3 + 6 + 2 + 5 เช่น 44 ตอนนี้เราจะบวก 4 + 4 เช่น 8 เนื่องจากเราบรรลุหลักเดียวดังนั้น , เอาต์พุตคือ 8

ป้อนข้อมูล − int num =3, int x =3

ผลผลิต − ผลรวมของตัวเลขแบบเรียกซ้ำใน n^x โดยที่ n และ x มีขนาดใหญ่มากคือ:9

คำอธิบาย − เราได้รับค่าจำนวนเต็มบวกเป็น num และ x โดยมีค่าเท่ากับ 3 และกำลังเป็น 3 ก่อนอื่น ให้คำนวณ 3 ^ 3 เช่น 9 เนื่องจากเราได้ตัวเลขหลักเดียวแล้ว เอาต์พุตจึงเป็น 9 และไม่จำเป็นต้องคำนวณเพิ่มเติมอีก

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนตัวแปรจำนวนเต็มเป็น num และ x แล้วส่งข้อมูลไปยังฟังก์ชัน Recursive_Digit(num, x) เพื่อการประมวลผลต่อไป

  • ภายในฟังก์ชัน Recursive_Digit(num, x)

    • ประกาศตัวแปร 'ผลรวม' ตราบเท่าที่และตั้งค่าให้เรียกใช้ฟังก์ชัน total_digits(num) ซึ่งจะคืนค่าผลรวมหลักของตัวเลขที่ส่งผ่านเป็นอาร์กิวเมนต์

    • ประกาศตัวแปรเป็น temp ของประเภท long และตั้งค่าด้วยกำลัง % 6

    • ตรวจสอบ IF total =3 OR total =6 AND power> 1 แล้วคืนค่า 9

    • มิฉะนั้น IF กำลัง =1 แล้วคืนค่าทั้งหมด

    • มิฉะนั้น ถ้ากำลัง =0 แล้วคืนค่า 1

    • ELSE IF, temp - 0 จากนั้นให้โทรกลับไปที่ total_digits((long)pow(total, 6))

    • ELSE ส่งคืนค่า total_digits((long)pow(total, temp))

  • ภายในฟังก์ชัน long total_digits(long num)

    • ตรวจสอบ IF num =0 แล้วคืนค่า 0 ตรวจสอบ IF, num % 9 =0 แล้วคืนค่า 9

    • มิฉะนั้น คืนค่า num % 9

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
long total_digits(long num){
   if(num == 0){
      return 0;
   }
   if(num % 9 == 0){
      return 9;
   }
   else{
      return num % 9;
   }
}
long Recursive_Digit(long num, long power){
   long total = total_digits(num);
   long temp = power % 6;
   if((total == 3 || total == 6) & power > 1){
      return 9;
   }
   else if (power == 1){
      return total;
   }
   else if (power == 0){
      return 1;
   }
   else if (temp == 0){
      return total_digits((long)pow(total, 6));
   }
   else{
      return total_digits((long)pow(total, temp));
   }
}
int main(){
   int num = 2345;
   int x = 98754;
   cout<<"Recursive sum of digit in n^x, where n and x are very large are: "<<Recursive_Digit(num, x);
   return 0;
}

ผลลัพธ์

หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้

Recursive sum of digit in n^x, where n and x are very large are: 1