वहाँ C++ में कोई पूर्वनिर्धारित समारोह है कि क्या संख्या किसी भी संख्या का वर्ग और घन के लिए एक ही है की जाँच करने के है ..बिल्कुल सही वर्ग और पूर्ण घन
उत्तर
नहीं है, लेकिन यह लिखने के लिए एक आसान है:
bool is_perfect_square(int n) {
if (n < 0)
return false;
int root(round(sqrt(n)));
return n == root * root;
}
bool is_perfect_cube(int n) {
int root(round(cbrt(n)));
return n == root * root * root;
}
sqrt(x)
, या सामान्य रूप में, pow(x, 1./2)
या pow(x, 1./3)
के लिए उदाहरण:
int n = 9;
int a = (int) sqrt((double) n);
if(a * a == n || (a+1) * (a+1) == n) // in case of an off-by-one float error
cout << "It's a square!\n";
संपादित करें: या सामान्य रूप में:
bool is_nth_power(int a, int n) {
if(n <= 0)
return false;
if(a < 0 && n % 2 == 0)
return false;
a = abs(a);
int b = pow(a, 1./n);
return pow((double) b, n) == a || pow((double) (b+1), n) == a;
}
समस्या (एक्स, 1./3)' कि 1/3, चल बिन्दु में एक सटीक प्रतिनिधित्व नहीं है तुम इतनी है वास्तव में "क्यूब रूट" नहीं हो रहा है। सी 99 के बाद 'cbrt' है, जो घन रूट प्राप्त करने का बेहतर काम करना चाहिए। मुझे लगता है कि –
मुझे लगता है। लेकिन 'पाउ' सामान्यीकृत करता है, और फ़्लोटिंग पॉइंट त्रुटियों के लिए सही करना आसान है। –
इस प्रयास करें:
#include<math.h>
int isperfect(long n)
{
double xp=sqrt((double)n);
if(n==(xp*xp))
return 1;
else
return 0;
}
नहीं है, कोई मानक ग या C++ कि क्या एक पूर्णांक एक पूर्ण वर्ग या एक एकदम सही है की जाँच करने के कार्य इस प्रकार हैं घन।
यदि आप इसे तेज करना चाहते हैं और अधिकांश उत्तरों में उल्लिखित फ्लोट/डबल रूटीन का उपयोग करने से बचें, तो केवल पूर्णांक का उपयोग करके बाइनरी खोज को कोड करें। यदि आप n^2 < m < (n + 1)^2 के साथ n ढूंढ सकते हैं, तो एम एक पूर्ण वर्ग नहीं है। यदि एम एक पूर्ण वर्ग है, तो आपको n^2 = m के साथ एक n मिल जाएगा। समस्या पर चर्चा की गई है here
वर्गों की पहचान करने के लिए मैंने जावा में इस एल्गोरिदम की कोशिश की। थोड़ा वाक्यविन्यास अंतर के साथ आप इसे सी ++ में भी कर सकते हैं। तर्क यह है कि, प्रत्येक दो लगातार पूर्ण वर्गों के बीच का अंतर 2. बढ़ता जा रहा है। डिफ (1,4) = 3, डिफ (4, 9) = 5, डिफ (9, 16) = 7, डिफ (16, 25) = 9 ..... चला जाता है। हम इस वर्ग का उपयोग सही वर्गों की पहचान के लिए कर सकते हैं। जावा कोड, है
boolean isSquare(int num){
int initdiff = 3;
int squarenum = 1;
boolean flag = false;
boolean square = false;
while(flag != true){
if(squarenum == num){
flag = true;
square = true;
}else{
square = false;
}
if(squarenum > num){
flag = true;
}
squarenum = squarenum + initdiff;
initdiff = initdiff + 2;
}
return square;
}
वर्गों की पहचान बनाने के लिए तेजी से हम एक और घटना का उपयोग कर सकते हैं, सही वर्गों के अंकों की पुनरावर्ती योग हमेशा 1,4,7 या 9. तो एक बहुत तेजी से कोड कर सकते हैं है हो ...
int recursiveSum(int num){
int sum = 0;
while(num != 0){
sum = sum + num%10;
num = num/10;
}
if(sum/10 != 0){
return recursiveSum(sum);
}
else{
return sum;
}
}
boolean isSquare(int num){
int initdiff = 3;
int squarenum = 1;
boolean flag = false;
boolean square = false;
while(flag != true){
if(squarenum == num){
flag = true;
square = true;
}else{
square = false;
}
if(squarenum > num){
flag = true;
}
squarenum = squarenum + initdiff;
initdiff = initdiff + 2;
}
return square;
}
boolean isCompleteSquare(int a){
// System.out.println(recursiveSum(a));
if(recursiveSum(a)==1 || recursiveSum(a)==4 || recursiveSum(a)==7 || recursiveSum(a)==9){
if(isSquare(a)){
return true;
}else{
return false;
}
}else{
return false;
}
}
पूर्ण वर्ग के लिए आप भी कर सकते हैं:
if(sqrt(n)==floor(sqrt(n)))
return true;
else
return false;
पूर्ण घन आप कर सकते हैं के लिए:
0,123,if(cbrt(n)==floor(cbrt(n)))
return true;
else
return false;
उम्मीद है कि इससे मदद मिलती है।
_IF_ यह "वापसी के बारे में" था, क्यों न केवल 'sqrt (n) == floor (sqrt (n))' वापस लौटें? (और 'फर्श' को' राउंड 'क्यों पसंद करते हैं?) फिर,' int r = round (cbrt (n)) है; वापसी एन == आर * आर * आर' - इनमें से कोई भी 'पूर्वनिर्धारित' नहीं है, हमारे 2016 ज्ञान_ को नहीं छोड़ रहा है: [क्रिस 'उत्तर] (http://stackoverflow.com/a/1549960/3789665)। – greybeard
हम builtin truc समारोह इस्तेमाल कर सकते हैं - `पॉव उपयोग करने के साथ
#include <math.h>
// For perfect square
bool is_perfect_sq(double n) {
double r = sqrt(n);
return !(r - trunc(r));
}
// For perfect cube
bool is_perfect_cube(double n) {
double r = cbrt(n);
return !(r - trunc(r));
}
- 1. बिल्कुल सही पास-थ्रू
- 2. "बिल्कुल सही" .NET विकास पर्यावरण?
- 3. बिल्कुल सही अग्रेषण
- 4. बिल्कुल सही अग्रेषण और std :: tuple (या अन्य templated कक्षा)
- 5. डी में बिल्कुल सही अग्रेषण?
- 6. बिल्कुल सही वस्तु के एक सदस्य अग्रेषण
- 7. टीसीपीडीएफ - पेगेनबर्स बिल्कुल सही नहीं है
- 8. पूर्ण वर्ग जोड़े
- 9. घन मानचित्र
- 10. PropertyInfo.GetSetMethod (सही) आधार वर्ग
- 11. कोई भी संख्या जानने के लिए तर्क जानता है बिल्कुल सही स्क्वायर है या नहीं?
- 12. घन स्पिन कार्यक्रम
- 13. मैं स्ट्रीम से बिल्कुल सही बाइट कैसे पढ़ूं?
- 14. बिल्कुल सही अग्रेषण - आभासी कार्यों के माध्यम से
- 15. घन/वक्र चिकना अंतर्वेशन
- 16. एक घन समीकरण
- 17. ब्लेंडर: असंभव घन
- 18. फ्रैक्टल घन कैसे बनाएं?
- 19. अंतर "वर्ग एक, वर्ग बी" और "वर्ग एक :: बी '
- 20. वर्ग पर jQuery स्वत: पूर्ण, आईडी
- 21. अजीब ओपन व्यवहार जब एक घन
- 22. Django व्यवस्थापक और MongoDB, बिल्कुल संभव है?
- 23. एक PHP वर्ग डिजाइनिंग। सही तरीका
- 24. दो संख्याओं के बीच सही वर्ग
- 25. उपयोगिता वर्ग - सही दृष्टिकोण क्या है?
- 26. घन बेजियर वक्र: अधिकतम ग्रेडियेंट और टक्कर से बचने का?
- 27. वैराडिक टेम्पलेट्स, डिफ़ॉल्ट तर्कों के साथ फ़ंक्शंस करने के लिए बिल्कुल सही अग्रेषण
- 28. itext पोजिशनिंग टेक्स्ट बिल्कुल
- 29. स्थिति सापेक्ष और सही संपत्ति
- 30. एक WebView बिल्कुल सफारी
आप शून्य से संभावित विभाजन कहां देखते हैं? sqrt (0) और cbrt (0) परिभाषित हैं। –
मेरे दिमाग में जो मूल जवाब था, वह 'n/root == root' वापस लौटा, लेकिन मैं एक अलग दृष्टिकोण का उपयोग कर समाप्त हुआ। इंगित करने के लिए धन्यवाद! जवाब संपादित करेंगे। –
फ्लोटिंग-पॉइंट त्रुटि के कारण यह हमेशा काम नहीं करेगा: यदि 'sqrt()' या 'cbrt()' वास्तविक रूट से कम ईपीएसलॉन लौटने के लिए होता है, तो एक पूर्णांक में कास्ट उसको छोटा कर देगा, और चेक असफल। उसके खिलाफ पूरी तरह से बुलेट प्रूफ होने के लिए, आपको स्क्वायर रूट केस के लिए 'n == (रूट + 1) * (रूट + 1)' या फिर 'n == (root + 1) * (रूट) की जांच करने की आवश्यकता है + 1) * (रूट + 1) 'घन रूट मामले के लिए। –