c++ - मापांक संचालक के कारण कोड संकलित करने में समस्या




c++11 (2)

मैंने एक सरणी में अंकों के रूप में एक संख्या (जो प्रोग्रामर द्वारा पूर्वनिर्धारित है) को संग्रहीत करने के लिए एक कार्यक्रम लिखा है।

उदाहरण के लिए, यदि मैं सरणी एरेक्स [4] में एक संख्या 1234 स्टोर करना चाहता हूं, तो इसके तत्व होंगे:

arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4

मैं नीचे दिए गए कोड का उपयोग करके इसे प्राप्त करने का प्रयास करता हूं:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int arrx[4];    // Stores the individual digits of number as array
    int digx = 4;   // Total number of digits in number
    int i;
    long int dupx = 1234;  // Number which has to be stored in array
    for(i = digx-1; i >= 0 ; i--)
    {
        arrx[digx-i-1] = int(dupx/pow(10,i));
        dupx = dupx%(pow(10, i));
    }
    return 0;
}

हालाँकि, जब मैं उपरोक्त कोड को संकलित करने का प्रयास करता हूं, तो मुझे निम्न त्रुटि संदेश मिलता है:

त्रुटि: प्रकार के अमान्य ऑपरेंड 'लॉन्ग इंट' और 'डबल' टू बाइनरी 'ऑपरेटर%'

एकमात्र निष्कर्ष जो मैं उपरोक्त त्रुटि से आकर्षित करने में सक्षम था, वह समस्या मापांक ऑपरेटर के साथ है।

इसलिए, मेरे मन में निम्नलिखित प्रश्न हैं

  1. मापांक ऑपरेटर वाले कोड के साथ वास्तव में क्या समस्या है?

  2. मैं इसे कैसे ठीक करूं?

मैं कोड का उपयोग कर रहा हूं :: मेरे संकलक के रूप में जीएनयू जीसीसी के साथ ब्लॉक संस्करण 17.12।


आप केवल पूर्णांक के साथ % उपयोग कर सकते हैं, और pow फ्लोटिंग-पॉइंट संख्या का उत्पादन करते हैं।

आप एक पूर्णांक पावर फ़ंक्शन लिख सकते हैं, या पूर्वनिर्धारित तालिका का उपयोग कर सकते हैं, लेकिन निर्माण के क्रम को उलटना और सबसे सही अंक के साथ शुरू करना सरल है:

int main()
{
   int arrx[4];    //stores the individual digits of number as array
   int digx = 4;   //total number of digits in number
   long int dupx = 1234;  //number which has to be stored in array
   for(int i = 0; i < digx; i++)
   {
        arrx[digx-i-1] = dupx%10;
        dupx = dupx/10;
   }
    return 0;
}

std::pow अपनी विभिन्न आकृतियों में एक अस्थायी बिंदु प्रकार देता है, भले ही तर्क अभिन्न प्रकार हों।

चूंकि % को अभिन्न तर्कों की आवश्यकता होती है, इसलिए संकलन विफल हो जाएगा।

(long)(pow(10,i)) का उपयोग करना एक फिक्स है, निश्चित रूप से (long) की जाँच काफी लंबी है। ध्यान दें कि IEEE754 के तहत भी pow को सबसे अच्छा फ्लोटिंग पॉइंट वैल्यू संभव नहीं है, इसलिए long ट्रंकेशन कभी-कभी हानिकारक हो सकता है; शायद std::round बाद कलाकारों को long पसंद किया जाता है। यद्यपि वर्तमान फैशन को किसी भी तर्क को pow करने के लिए विचार करना है जो कि दोषपूर्ण होने के लिए अभिन्न तर्कों को तोड़ता है।

आपके मामले में हालांकि मैं परिभाषित करने के लिए परीक्षा होगी

constexpr/*use const on earlier standards*/ int powers[] = {1, 10, 100, 1000};

और उचित रूप से सूचकांक।





c++11